如何使用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
。