![](/img/trans.png)
[英]How can I return grep results one line at a time in order to use the parsed data in another script?
[英]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
块可确保打印最后时间的结果。
另一个选择是使用关联数组,但是如果这样做,结果将不排序。 另外,如果您的文件很大,则可能会占用内存(此方法只存储prev
和count
因此内存使用与文件大小无关)。
由于问题具有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.