Removendo linhas com um único campo comum

2

Eu tenho um arquivo separado por tabulações que se parece com isso:

123   some text
123   some different text
334   some other text
341   more text

e eu quero fazer duas coisas. Uma delas é pedir tudo numericamente (isso é fácil de fazer) e a outra é remover uma linha se o número já estiver presente. Ou seja a saída ficaria assim:

123   some text
334   some other text
341   more text

Eu tentei obter um arquivo com apenas os números exclusivos, por exemplo

123
334
341

e juntando-se ao arquivo original com:

join -j 1 justNumbers.txt original.txt

mas isso me deu o arquivo original de volta. Alguma idéia?

    
por Stefan 04.07.2014 / 17:29

2 respostas

6

Se você deseja classificar / testar a exclusividade do campo primeiro especificamente, e seu sistema tem a versão GNU coreutils de sort , então eu acho que você poderia usar apenas

sort -nu file

viz.

$ sort -nu file
123   some text
334   some other text
341   more text


De info coreutils 'sort invocation'

The commands sort -u and sort | uniq are equivalent, but this equivalence does not extend to arbitrary sort options. For example, sort -n -u inspects only the value of the initial numeric string when checking for uniqueness, whereas sort -n | uniq inspects the entire line.

    
por 04.07.2014 / 18:13
3

Experimente este awk :

awk '!($1 in a){a[$1];print}' file
123   some text
334   some other text
341   more text

Isso pressupõe que o arquivo foi classificado.

    
por 04.07.2014 / 17:34