我正在尝试找出包含字符串“event”和“type”的行数。我要搜索的文件位于多个文件夹中,并且已压缩。我能够获得所需内容的汇总计数,但我的目标是显示每个文件的计数。这是我目前正在使用的:
zcat /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1* | zcat /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1* | grep '事件' | grep '类型' |厕所-l
我的输出是:
86446
但我希望我的输出看起来像:
result-2018-05-10.log.gz: 1000
result-2018-05-11.log.gz: 3000
result-2018-05-12.log.gz: 20000
result-2018-05-13.log.gz: 4446
result-2018-05-14.log.gz: 12000
result-2018-05-15.log.gz: 10000
result-2018-05-16.log.gz: 15000
result-2018-05-17.log.gz: 5000
result-2018-05-18.log.gz: 6000
result-2018-05-19.log.gz: 10000
有什么建议么?
答案1
对于仅两个测试,这应该足够了:
zgrep -E -c 'event.*type|type.*event' /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1*
测试一行是否包含type
and 与测试它是否包含后跟或后跟event
相同。如果需要第三次测试,这将无法很好地扩展。type
event
event
type
然后添加类似的内容| sed 's#^.*/##'
应该会给出问题的确切结果。
更新:
对于更通用的东西,循环似乎更好,所以:
for i in /folder1/{folderA,folderB,folderC}/folder2/folder3/result-2018-05-1*; do
printf '%s: ' "$(basename "$i")"
zcat < "$i" | grep 'filter1' | grep 'filter 2' | grep 'filter3' | wc -l
done