Uniq entfernt keine Duplikate

10

Ich habe den folgenden Befehl verwendet

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

als ich mich fragte, warum ich uniqdie Duplikate nicht entfernen sollte. Irgendeine Idee warum?

Matthieu Riegler
quelle

Antworten:

15

Sie müssen die Ausgabe sortieren, damit der uniqBefehl funktionieren kann. Siehe die Manpage:

Filtern Sie benachbarte übereinstimmende Zeilen von INPUT (oder Standardeingabe) und schreiben Sie in OUTPUT (oder Standardausgabe).

Sie können also die Ausgabe sortzuerst in und dann in uniqsie leiten. Oder Sie können die sortFähigkeit nutzen, die Sortierung durchzuführen und alles zusammen so einzigartig zu machen:

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

Beispiele

sortieren | 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

Dein Beispiel

$ 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"
slm
quelle
und was ist, wenn ich nicht möchte, dass die Ausgabe sortiert wird, weil meine Bestellung wichtig ist? uniq kann das nicht?
Phil294
@Blauhirn nein kann es nicht.
slm