identificando entradas duplicadas de um arquivo no servidor unix

0

Meu arquivo é um arquivo separado por ponto-e-vírgula com várias colunas. Eu quero remover registros duplicados da primeira coluna apenas. Além disso, eu quero uma contagem dessas entradas duplicadas apenas da coluna primeiro. alguma sugestão por favor?

    
por Anup 19.04.2017 / 12:35

1 resposta

1

Algo como isso deve funcionar:

awk -F";" '!seen[$1]++{print}END {for (i in seen) if (seen[i]>1) print i,"found :" seen[i] "times"}' file

A primeira parte antes de END não imprimirá duplicatas emulando uniq . Isso significa que se uma entrada for encontrada duas ou mais vezes, somente a primeira entrada será impressa.

O código em END imprimirá todas as entradas encontradas mais de uma vez.

Se você precisar imprimir entradas únicas e únicas, emulando uniq -u , o que significa que, se uma entrada for encontrada duas ou mais vezes, não será impressa, então você pode usar:

awk -F";" '{seen[$1]++}END {for (k=1;k<=2;k++) for (i in seen) if (seen[i]==1) {print i;delete seen[i];continue} else {print i,"found :" seen[i] "times"}}' file

Isso itera o array duas vezes. A primeira vez que as entradas true uniq serão impressas e a segunda vez que as entradas duplicadas serão impressas.

Alternativa:

awk -F";" '{seen[$1]++}END {for (i in seen) print "found :" seen[i] "times:",i}' file |sort

Isso imprimirá cada entrada junto com a contagem (entradas únicas serão encontradas uma vez, entradas não exclusivas serão encontradas mais de uma vez)

    
por 19.04.2017 / 13:56

Tags