如何从 unix 中 cut 命令的结果中提取子字符串?

发布于 2024-10-27 13:05:52 字数 391 浏览 5 评论 0原文

我有一个文件是“|”划定的。文件中的字段之一是时间戳。该字段采用以下格式: MM-dd-yyyy HH:mm:ss 我希望能够将唯一日期打印到文件中。我可以使用 cut 命令 (cut -f1 -d'|' _file_name_ |sort|uniq) 来提取唯一日期。然而,在该领域的时间部分,我看到了数百个结果。运行 cut 命令后,我想获取前 11 个字符的子字符串来显示唯一日期。我尝试使用 awk 命令,例如: awk ' { print substr($1,1-11) }' |切-f1-d'|' _file_name_ |排序|uniq > _output_file_

我运气不好。我是否以错误的方式处理这个问题?有没有更简单的方法来提取我需要的数据。任何帮助将不胜感激。

I have a file that is '|' delimited. One of the fields within the file is a time stamp. The field is in the following format: MM-dd-yyyy HH:mm:ss I'd like to be able to print to a file unique dates. I can use the cut command (cut -f1 -d'|' _file_name_ |sort|uniq) to extract unique dates. However, with the time portion of the field, I'm seeing hundreds of results. After I run the cut command, I'd like to take the substring of the first eleven characters to display unique dates. I tried using an awk command such as:
awk ' { print substr($1,1-11) }' | cut -f1 -d'|' _file_name_ |sort|uniq > _output_file_

I'm having no luck. Am I going about this the wrong way? Is there a more simple way of extracting the data I need. Any help would be appreciated.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

绅刃 2024-11-03 13:05:52

cut -c1-11 将显示每个输入行的字符 1-11。

cut -c1-11 will display characters 1-11 of each input line.

嘦怹 2024-11-03 13:05:52

如果日期是文件中的第一个(空格分隔)字段,则唯一日期的列表就是:

cut -f1 -d' ' filename | sort -u

更新:除了 @shellter 的正确答案之外,我将仅提供一个替代方案来演示其他 awk 功能:

awk '{split($10, a); date[a[1]]++} END {for (d in date) print d}' filename

if the date is the first (space separated) field in the file, then the list of unique dates is just:

cut -f1 -d' ' filename | sort -u

Update: in addition to @shellter's correct answer, I'll just present an alternative to demonstrate other awk facilities:

awk '{split($10, a); date[a[1]]++} END {for (d in date) print d}' filename
恰似旧人归 2024-11-03 13:05:52

你们都在那里。这是基于日期时间戳位于字段 1 中的想法。

编辑:将字段更改为 10,还使用 ​​-u 选项进行排序,而不是使用 uniq 进行 sep 过程

您不需要剪切,awk 会为您做这件事。

awk -F"|" ' { print substr($10,1,11) }'  _file_name_ |sort -u > _output_file_

我希望这有帮助。

PS,由于您似乎是新用户,如果您得到的答案对您有帮助,请记住将其标记为已接受,或给它一个+(或-)作为有用的答案

You're all most there. This is based on the idea that the date time stamp is in field 1.

Edit : changed field to 10, also used -u option to sort instead of sep process with uniq

You don't need the cut, awk will do that for you.

awk -F"|" ' { print substr($10,1,11) }'  _file_name_ |sort -u > _output_file_

I hope this helps.

P.S. as you appear to be a new user, if you get an answer that helps you please remember to mark it as accepted, or give it a + (or -) as a useful answer

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文