Quais são alguns one-liners que saída pode elementos únicos da coluna enésima para outro arquivo?

StackOverflow https://stackoverflow.com/questions/1276041

  •  16-09-2019
  •  | 
  •  

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
Foi útil?

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
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top