Você só precisa de:
sort -rnk1 file | awk '{print $1}' | uniq -c | sort -nk2
ou se você tiver apenas um número no primeiro campo:
sort -rnk1 file | tr -cs 0-9 '[\n*]' | uniq -c | sort -nk2
Eu tenho um arquivo logs.txt
com números que se repetem:
1 QWE
1 ASD
1 QWE
1 QWE
1 QWE
1 qwe
12
22 qwe
2 aaa
2 vcc
2 xxx
4 asa
44 qwe
4 gfd
4 bcx
5
6 kuy
7
76 lol
5
4 ggg
23
2 ttt
34
5
5
76
5
6
78
99
8
88
7
6
88
88
88
88 wer
88 tyu
99 dsf
78 dfg
78 fgh
78
78 qwe
6 qwe
5
22 qwe
Eu preciso classificá-los. Então o mais alto deve estar no topo. exemplo: o número 1 se repete 20 vezes, o número 2 repete 44 vezes ...
20 1
44 2
1 3
5 4
.....
Eu executo este comando:
awk '{print $1}' logs.txt >> log2.txt
cat log2.txt | uniq -c >> log3.txt
sort -n srp >> log4.txt
tac log4.txt > log5.txt
Funciona para mim, mas levou muito tempo! Eu quero colocar todos os comandos no arquivo para executar. Eu preciso criar um script!
Aqui está outra solução, baseada apenas em awk
e sort
:
awk '{a[$1]++} END{for(i in a)print a[i],i}' logs.txt | sort -k2n
GNU awk
permite o controle de ordem de passagem de matriz via PROCINFO["sorted_in"]
, então
awk 'BEGIN{PROCINFO["sorted_in"] = "@val_num_desc"}; {a[$1]++};
END{for (k in a) print k, a[k]}' logs.txt