Classificando arquivos pela frequência de “conteúdo da linha”

1

Imagine que existem 3 arquivos de texto.

1.txt:

a
b
c

2.txt:

f
c
d

3.txt:

b
c
f

Como eu os classifico pela frequência de cada "conteúdo da linha" ? (Em caso de colisões alfabeticamente)

Resultado:

c
b
f
a
d
    
por Samuel Shifterovich 07.07.2016 / 01:08

2 respostas

4

Você pode usar sort e uniq para classificar as linhas por frequências.

sort *.txt | uniq -c | sort -k1,1nr -k2 | sed 's/^ *[0-9]* //'

O segundo sort usa o -k2 secundário para classificar as linhas da mesma frequência alfabeticamente. O% final sed apenas remove as frequências.

    
por 07.07.2016 / 01:18
1

Você pode classificar em ordem decrescente de frequência usando sort e uniq:

$ sort *.txt | uniq -c | sort -rn
      3 c
      2 f
      2 b
      1 d
      1 a

Se você deseja remover a contagem:

$ sort *.txt | uniq -c | sort -rn | sed 's/[[:space:]]*[[:digit:]]*[[:space:]]//'
c
f
b
d
a

Observe que duas chamadas para sort são obrigatórias. A primeira é porque uniq -c requer entrada classificada. A segunda é necessária para classificar as linhas em ordem numérica decrescente por contagem (frequência).

    
por 07.07.2016 / 01:14

Tags