localize o número de linhas duplicadas com base na condição de repetição repetida

1

Basicamente eu tenho um arquivo de texto grande no servidor linux e gostaria de contar duplicado para entradas baseadas apenas nos primeiros 6 dígitos:

Entrada:

1111110000000222982
112114
1111119292828
11101110
112114

Saída:

111111 (2)
112114 (2)

what is the best solution to handle that case?

    
por αԋɱҽԃ αмєяιcαη 16.11.2017 / 15:32

2 respostas

0
awk '
 {a[substr($0,1,6)]++} 
 END {for (i in a) {if (a[i] > 1) printf "%s (%d)\n", i, a[i]}}
' file
111111 (2)
112114 (2)
    
por 16.11.2017 / 15:38
2

Com algumas implementações de uniq , você pode fazer:

$ <file cut -c-6 | sort | uniq -cd
   2 111111
   2 112114

Nem todas as implementações suportam a combinação de -c (count) com -d (apenas duplicados de saída).

Para aqueles que não o fizerem, você pode usar uniq -c e pipe para awk '$1 > 1' ou fazer a coisa toda em awk , o que economizará você a ordenação (mas com o custo potencial de usar muita memória se houver muitas cadeias únicas (embora aqui seja apenas 1 milhão de cadeias de 6 caracteres diferentes, o que não é muito))

    
por 16.11.2017 / 15:42