繁体   English   中英

我如何使用grep / awk或任何脚本编制方法来汇总时间输入行(例如,按秒)

[英]how can I use grep/awk or any scripting methodology in order to aggregate time input lines (for example by second)

我如何使用grep / awk或任何脚本编制方法来汇总时间输入行(例如,按秒),例如:

我有输入:

13:27:53.336281
13:27:53.336284
13:27:53.346284
13:27:54.336435
13:27:54.336468

如果我需要输出

13:27:53 3
13:27:54 2
cut -f 1 -d . input.txt | sort | uniq -c

我不认为您可以使用grep做您想做的事,但是awk可以:

awk -F. 'NR > 1 && $1 != prev { print prev, count; count = 0 } 
         { prev = $1; ++count } 
         END { print prev, count }' file

只要prev与第一个字段的当前值$1不匹配,就会输出输出。 作为第一个记录被跳过prev尚未设置。 中间块适用于所有记录,并增加计数。 END块可确保打印最后时间的结果。

另一个选择是使用关联数组,但是如果这样做,结果将不排序。 另外,如果您的文件很大,则可能会占用内存(此方法只存储prevcount因此内存使用与文件大小无关)。

由于问题具有awk标签,因此这是一个awk解决方案。

$ cat input.txt 
13:27:53.336281
13:27:53.336284
13:27:53.346284
13:27:54.336435
13:27:54.336468
$ awk -F'.' '{ aa[$1]++ } END{ for (key in aa) print key " " aa[key]}' input.txt 
13:27:53 3
13:27:54 2

更新:如注释中所示,不能保证输出的顺序。 因此,可能有必要将awk输出传递给sort

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM