$ cat data.txt
aaaaaa
aaaaaa
cccccc
aaaaaa
aaaaaa
bbbbbb
$ cat data.txt | uniq
aaaaaa
cccccc
aaaaaa
bbbbbb
$ cat data.txt | sort | uniq
aaaaaa
bbbbbb
cccccc
$
O resultado que eu preciso é exibir todas as linhas do arquivo original, removendo todas as duplicatas (não apenas as consecutivas), mantendo a ordem original das instruções no arquivo .
Aqui, neste exemplo, o resultado que eu realmente estava procurando era
aaaaaa
cccccc
bbbbbb
Como posso executar esta uniq
operação generalizada em geral?
text-processing
uniq
lazer
fonte
fonte
{ if (!seen[$0]++) print }
if
,print
, parênteses e chaves:awk '!seen[$0]++'
'!LarryWall[$0]++'
para todos os cuidados com awk, mas "visto" ajuda as pessoas a entender melhor o programa.john tem uma ferramenta chamada
unique
:Conseguir o mesmo sem ferramentas adicionais em uma única linha de comando é um pouco mais complexo:
nl
imprime números de linhas na frente das linhas; portanto, se nóssort
/uniq
atrás deles, podemos restaurar a ordem original das linhas.sed
apenas exclui os números de linha depois;)fonte
nl -ba -nrz data.txt | sort -k2 -u | sort | cut -f2
Eu prefiro usar isso:
cat -n
adiciona números de linha,sort --key=2.1 -b -u
classifica no segundo campo (após os números de linha adicionados), ignorando espaços em branco à esquerda, mantendo linhas exclusivassort -n
classifica em ordem numérica estritacut -c8-
mantenha todos os caracteres da coluna 8 à EOL (ou seja, omita os números de linha que incluímos)fonte
O Perl possui um módulo que você pode usar que inclui uma função chamada
uniq
. Portanto, se você tiver seus dados carregados em uma matriz no Perl, basta chamar a função como esta para torná-la única, mas ainda assim manter a ordem original.Você pode ler mais sobre este módulo aqui: List :: MoreUtils
fonte