Eu tenho logs muito grandes (vários gigabytes por dia), que podem (mas não precisam) conter linhas específicas. Preciso contar o número de ocorrências de cada uma dessas linhas diariamente.
Eu tenho um arquivo patterns.in
, que contém as linhas desejadas. Por exemplo:
aaaa
bbbb
cccc
dddd
eeee
ffff
Os arquivos de log podem ter esta aparência:
asd
dfg
aaaa
aaaa
sa
sdf
dddd
dddd
dddd
dddd
ghj
bbbb
cccc
cccc
cccc
fgg
fgh
hjk
A primeira (e talvez a abordagem mais óbvia) é usar grep
, sort
e uniq
da seguinte maneira:
grep -f patterns.in logfile.txt | sort | uniq -c
que fornece o seguinte resultado:
2 aaaa
1 bbbb
3 cccc
4 dddd
Está perto do que eu quero alcançar, mas meu resultado desejado é:
2 aaaa
1 bbbb
3 cccc
4 dddd
0 eeee
0 ffff
Portanto, o problema é: como imprimir '0' se uma linha do arquivo pattern.in
não for correspondida? Ele precisa ser feito da maneira mais simples possível, pois tudo que tenho disponível é o ambiente cygwin .