Uniq não removerá duplicados

5

Eu estava usando o seguinte comando

curl -silent http://api.openstreetmap.org/api/0.6/relation/2919627 http://api.openstreetmap.org/api/0.6/relation/2919628 | grep node | awk '{print $3}' | uniq

quando me perguntei por que uniq não removeria as duplicatas. Alguma ideia do porquê?

    
por Matthieu Riegler 08.02.2014 / 03:41

1 resposta

9

Você precisa classificar a saída para que o comando uniq possa funcionar. Veja a man page:

Filter adjacent matching lines from INPUT (or standard input), writing to OUTPUT (or standard output).

Assim, você pode canalizar a saída para sort primeiro e, em seguida, uniq . Ou você pode usar a capacidade de sort de executar o tipo e unificar todos juntos da seguinte forma:

$ ...your command... | sort -u

Exemplos

classificar | uniq

$ cat <(seq 5) <(seq 5) | sort | uniq
1
2
3
4
5

sort -u

$ cat <(seq 5) <(seq 5) | sort -u
1
2
3
4
5

Seu exemplo

$ curl -silent http://api.openstreetmap.org/api/0.6/relation/2919627 http://api.openstreetmap.org/api/0.6/relation/2919628 \
      | grep node | awk '{print $3}' | sort -u
ref="1828989762"
ref="1829038636"
ref="1829656128"
ref="1865479751"
ref="451116245"
ref="451237910"
ref="451237911"
ref="451237917"
ref="451237920"
ref="451237925"
ref="451237933"
ref="451237934"
ref="451237941"
ref="451237943"
ref="451237945"
ref="451237947"
ref="451237950"
ref="451237953"
    
por 08.02.2014 / 03:51