这是我使用的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
非常感谢您提前的帮助
一种方法是扩展当前的管道,使用uniq
计算出现次数,再使用awk
重新格式化行:
your_commands | uniq -c | awk '{ print $2 " = " $1 }'
uniq
命令需要接收排序后的输入,因此您可能需要在使用之前将其传递给 sort
命令进行排序。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中,关联数组是未排序的,因此输出顺序可能会有所不同。
sort
和 uniq -c
中,以计算所有重复项的数量。grep 'Query failed' file.txt | grep -o '\bT\w*' | sort | uniq -c
2 Test1
3 Test2
1 Test3
2 Test4
从你的示例中看起来,原始文件已经排序。如果是这样的话,你可以省略 sort
步骤。