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)
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?
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))
Tags grep awk sed linux regular-expression