计算与特定模式匹配的行数的最简单方法,如果未找到行,则包括“0”?

计算与特定模式匹配的行数的最简单方法,如果未找到行,则包括“0”?

我有非常大的日志(每天几千兆字节),可以(但不需要)包含特定行。我必须每天计算每一行出现的次数。

我有一个文件patterns.in,其中包含所需的行。例如:

aaaa
bbbb
cccc
dddd
eeee
ffff

日志文件可能如下所示:

asd
dfg
aaaa
aaaa
sa
sdf
dddd
dddd
dddd
dddd
ghj
bbbb
cccc
cccc
cccc
fgg
fgh
hjk

第一种(也许是最明显的方法)是使用grep,sort并按uniq以下方式:

grep -f patterns.in logfile.txt | sort | uniq -c

给出以下结果:

   2 aaaa
   1 bbbb
   3 cccc
   4 dddd

它接近我想要实现的目标,但我想要的结果是:

   2 aaaa
   1 bbbb
   3 cccc
   4 dddd
   0 eeee
   0 ffff

所以问题是:如果文件中的一行pattern.in不匹配,如何打印“0”?它需要以最简单的方式完成,因为我所拥有的就是西格温环境。

答案1

如何将模式文件作为数据文件返回,以便每个模式至少找到一个匹配项,然后从每个匹配项的最终报告计数中减去 1

grep -f patterns.in logfile.txt patterns.in | cut -f2 -d':' | sort | uniq -c | awk '{print($1 - 1" "$2)}'

相关内容