我能否使用grep命令查找grep结果中相同结果的数量?

3

这是我使用的grep命令:

grep 'Query failed' file.txt | grep -o '\bT\w*'

搜索字符串“Query failed”,然后它会给我以字母T开头的单词。

例如,结果为:

Test1
Test1
Test2
Test2
Test2
Test3
Test4
Test4

是否可以得到这样的结果:

Test1 = 2
Test2 = 3
Test3 = 1
Test4 = 2

非常感谢您提前的帮助

2个回答

3

一种方法是扩展当前的管道,使用uniq计算出现次数,再使用awk重新格式化行:

your_commands | uniq -c | awk '{ print $2 " = " $1 }'

请注意,uniq 命令需要接收排序后的输入,因此您可能需要在使用之前将其传递给 sort 命令进行排序。
或者,您可以使用 awk 命令完成整个操作:
awk '/Query failed/ { for (i = 1; i <= NF; ++i) if ($i ~ /^T/) ++seen[$i] } 
    END { for (i in seen) print i " = " seen[i] }' file

在匹配该模式的行上,循环遍历所有单词,并计算以"T"开头的任何单词的数量。处理完文件后,循环遍历数组并打印结果。

请注意,在awk中,关联数组是未排序的,因此输出顺序可能会有所不同。


3
将其管道传输到 sortuniq -c 中,以计算所有重复项的数量。
grep 'Query failed' file.txt | grep -o '\bT\w*' | sort | uniq -c

输出结果如下:
   2 Test1
   3 Test2
   1 Test3
   2 Test4

从你的示例中看起来,原始文件已经排序。如果是这样的话,你可以省略 sort 步骤。


谢谢!我也可以按数字排序而不是测试吗? - Fabian
“uniq” 要求输入必须是排序过的,因此在使用 “uniq” 之前必须进行排序。 - Barmar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接