Eu tenho um arquivo que contém cerca de um milhão de linhas. Nas linhas, tenho um campo chamado transactionid
, que tem valores repetitivos. O que preciso fazer é contá-los de maneira distinta.
Não importa quantas vezes um valor seja repetido, ele deve ser contado apenas uma vez.
text-processing
awk
Olgun Kaya
fonte
fonte
... No matter of how many times a value is repeated, it should be counted as 1. ...
cat <file_name> | awk -F"|" '{if ((substr($2,0,8)=='20120110')) print $28}' | sort -u | wc -l
a cláusula if era para outra verificação de data como parece óbvio :)Respostas:
OK, supondo que seu arquivo seja um arquivo de texto, com os campos separados por separador de vírgula ','. Você também saberia qual campo
'transactionid'
está em termos de sua posição. Supondo que seu'transactionid'
campo seja o 7º.Isso contaria as ocorrências distintas / únicas no 7º campo e imprimirá o resultado.
fonte
sort
antes douniq
comando.uniq
eliminar registros, eles precisam estar próximos um do outro.Talvez não seja o método mais elegante, mas isso deve funcionar:
onde
$1
é o número correspondente ao campo a ser analisado.fonte
Não há necessidade de classificar o arquivo. (
uniq
Requer que o arquivo seja classificado)Este script do awk assume que o campo é o primeiro campo delimitado por espaço em branco.
fonte
sort
implementações é projetada para lidar bem com arquivos enormes.