Apenas awk
:
awk '{$1=""; a[$0]++} END{for (i in a) if (a[i]>=100) print a[i]i}' file.txt
-
Criando o array
a
com chaves como campos que tornam o primeiro campo nulo e os valores como contagem dos campos (chaves) -
No
END
, as chaves e os valores são impressos onde o valor é>=100
Combinação de ferramentas comuns (como você estava usando):
cut -d' ' -f2- file.txt | sort | uniq -c | awk '$1 >= 100'
-
cut -d' ' -f2- file.txt
obtém do segundo campo separado por espaços até o final -
sort
classifica o conteúdo -
uniq -c
obtém a contagem -
awk '$1 >= 100'
obtém as linhas em que o primeiro campo (contagem) é>=100
Exemplo: Usando o limite como 10:
% cat file.txt
1385940727.551004 111.8.17.50 TCP
1385940735.434301 111.8.17.50 TCP
1385940739.646539 111.8.17.50 TCP
1385940755.767752 111.8.17.50 TCP
1385940758.258988 111.8.17.50 TCP
1385940762.911809 111.8.17.50 TCP
1385940791.310308 111.8.17.50 TCP
1385940807.928309 111.8.17.50 TCP
1385940828.261464 111.8.17.50 TCP
1385940949.030512 111.8.17.50 TCP
1385936137.681823 111.87.58.139 ICMP
1385936137.692510 111.87.58.139 ICMP
1385936159.164373 111.87.58.139 ICMP
1385936595.854667 111.87.58.139 ICMP
1385936595.865145 111.87.58.139 ICMP
1385936939.448178 111.87.58.139 UDP
1385936939.448178 111.87.58.139 UDP
% awk '{$1=""; a[$0]++} END{for (i in a) if (a[i]>=10) print a[i]i}' file.txt
10 111.8.17.50 TCP
% cut -d' ' -f2- file.txt | sort | uniq -c | awk '$1 >= 10'
10 111.8.17.50 TCP