Quais são alguns one-liners que saída pode elementos únicos da coluna enésima para outro arquivo?
Pergunta
Eu tenho um arquivo como este:
1 2 3
4 5 6
7 6 8
9 6 3
4 4 4
Quais são alguns one-liners que saída pode elementos únicos da coluna enésima para outro arquivo?
EDIT: Aqui está uma lista de soluções pessoas deram. Obrigado rapazes!
cat in.txt | cut -d' ' -f 3 | sort -u
cut -c 1 t.txt | sort -u
awk '{ print $2 }' cols.txt | uniq
perl -anE 'say $F[0] unless $h{$F[0]}++' filename
Solução
Corrigido:. Obrigado Mark Rushakoff
$ cut -c 1 t.txt | sort | uniq
ou
$ cut -c 1 t.txt | sort -u
1
4
7
9
Outras dicas
Em Perl antes 5.10
perl -lane 'print $F[0] unless $h{$F[0]}++' filename
Em Perl após 5.10
perl -anE 'say $F[0] unless $h{$F[0]}++' filename
Substituir 0
com a coluna que deseja para a saída.
Para j_random_hacker, aqui é uma implementação que vai usar muito pouca memória (mas será um mais lento e requer mais digitação):
perl -lane 'BEGIN {dbmopen %h, "/tmp/$$", 0600; unlink "/tmp/$$.db" } print $F[0] unless $h{$F[0]}++' filename
dbmopen cria uma interface entre um arquivo DBM (que cria ou abre) eo hash chamado% h. Qualquer coisa armazenada em% h será armazenado no disco, em vez de na memória. Excluindo o arquivo com unlink garante que o arquivo não vai ficar por aqui depois que o programa é feito , mas não tem efeito sobre o processo atual (uma vez que, de acordo com regras POSIX, filehandles abertas são respeitados pelo sistema de arquivos como arquivos reais).
Tomar os valores exclusivos da terceira coluna:
$ cat in.txt | cut -d' ' -f 3 | sort -u
3
4
6
8
meios cut -d' '
para separar a entrada delimitada por espaços, e os meios -f 3
parte tomar o terceiro campo. Finalmente, sort -u
ordena a saída, mantendo somente as entradas exclusivas.
Say seu arquivo é "cols.txt" e você quer os elementos exclusivos da segunda coluna:
awk '{ print $2 }' cols.txt | uniq
Você pode achar o seguinte artigo útil para aprender mais sobre esses utilitários:
Se usando awk, não há necessidade de usar outros comandos
awk '!_[$2]++{print $2}' file