Grep

計算與特定模式匹配的行的最簡單方法,如果找不到行,包括“0”?

  • October 10, 2012

我有非常大的日誌(每天幾 GB),可以(但不需要)包含特定的行。我必須每天計算這些行中每一行的出現次數。

我有一個文件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,sortuniq以下列方式:

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’ ?它需要以最簡單的方式完成,因為我只有cygwin環境。

如何將模式文件作為數據文件返回,以便每個模式找到至少一個匹配項,然後從每個匹配項的最終報告計數中減去一個

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

引用自:https://unix.stackexchange.com/questions/50491