查找多个目录中多个压缩文件的字符串计数(非聚合)

查找多个目录中多个压缩文件的字符串计数(非聚合)

我正在尝试找出包含字符串“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*

测试一行是否包含typeand 与测试它是否包含后跟或后跟event相同。如果需要第三次测试,这将无法很好地扩展。typeeventeventtype

然后添加类似的内容| 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

相关内容