使用正则表达式打印元素在文件中出现的次数
printing the number of times a element occurs in a file using regex
我有一个类似于下面的长数据
16:24:59 0 0 0
16:24:59 0 1 0
16:25:00 0 1 0
16:25:00 0 1 0
16:25:00 0 2 0
16:25:00 0 2 0
16:25:00 1 0 1
16:25:01 0 0 0
16:25:01 0 0 0
16:25:01 0 0 0
16:25:01 0 0 0
16:25:01 4 9 4
16:25:02 0 0 0
16:25:02 0 0 0
16:25:02 0 0 0
16:25:02 0 1 0
16:25:02 1 9 1
16:25:02 2 0 2
我希望输出第 1 列中的元素及其出现的次数。以下是我的期望。我该怎么做?
16:24:59 2
16:25:00 5
16:25:01 5
16:25:02 6
如何将上面的替换为
t1 2
t2 5
t3 5
t4 6
.
.
tn 9
使用 awk
非常简单
awk '{count[]++} END{ for ( i in count) print i, count[i]}'
测试
$ awk '{count[]++} END{ for ( i in count) print i, count[i]}' input
16:24:59 2
16:25:00 5
16:25:01 5
16:25:02 6
它有什么作用?
count[]++
创建一个由第一个字段索引的关联数组。
END
在输入文件末尾执行的操作。
for ( i in count) print i, count[i]
遍历数组 count
并打印值
以防万一您需要 grep 和 uniq 解决方案:
$ grep -Eo '^\s*\d\d:\d\d:\d\d' /tmp/lines.txt | uniq -c
2 16:24:59
5 16:25:00
5 16:25:01
6 16:25:02
或者,如果制表符分隔,请使用 cut
:
$ cut -f 2 /tmp/lines.txt | uniq -c
2 16:24:59
5 16:25:00
5 16:25:01
6 16:25:02
我有一个类似于下面的长数据
16:24:59 0 0 0
16:24:59 0 1 0
16:25:00 0 1 0
16:25:00 0 1 0
16:25:00 0 2 0
16:25:00 0 2 0
16:25:00 1 0 1
16:25:01 0 0 0
16:25:01 0 0 0
16:25:01 0 0 0
16:25:01 0 0 0
16:25:01 4 9 4
16:25:02 0 0 0
16:25:02 0 0 0
16:25:02 0 0 0
16:25:02 0 1 0
16:25:02 1 9 1
16:25:02 2 0 2
我希望输出第 1 列中的元素及其出现的次数。以下是我的期望。我该怎么做?
16:24:59 2
16:25:00 5
16:25:01 5
16:25:02 6
如何将上面的替换为
t1 2
t2 5
t3 5
t4 6
.
.
tn 9
使用 awk
awk '{count[]++} END{ for ( i in count) print i, count[i]}'
测试
$ awk '{count[]++} END{ for ( i in count) print i, count[i]}' input
16:24:59 2
16:25:00 5
16:25:01 5
16:25:02 6
它有什么作用?
count[]++
创建一个由第一个字段索引的关联数组。END
在输入文件末尾执行的操作。for ( i in count) print i, count[i]
遍历数组count
并打印值
以防万一您需要 grep 和 uniq 解决方案:
$ grep -Eo '^\s*\d\d:\d\d:\d\d' /tmp/lines.txt | uniq -c
2 16:24:59
5 16:25:00
5 16:25:01
6 16:25:02
或者,如果制表符分隔,请使用 cut
:
$ cut -f 2 /tmp/lines.txt | uniq -c
2 16:24:59
5 16:25:00
5 16:25:01
6 16:25:02