Como ordenar dados no arquivo usando script?

2

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!

    
por Invoker 02.06.2015 / 05:37

3 respostas

3

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
    
por 02.06.2015 / 05:51
3

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
    
por 02.06.2015 / 06:30
3

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
    
por 02.06.2015 / 07:04