Command-Line

Uniq 不會刪除重複項

  • June 12, 2020

我正在使用以下命令

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

當我想知道為什麼uniq不刪除重複項時。知道為什麼嗎?

您必須對輸出進行排序才能使uniq命令能夠工作。請參閱手冊頁:

從 INPUT(或標準輸入)過濾相鄰的匹配行,寫入 OUTPUT(或標準輸出)。

因此,您可以先將輸出通過管道輸入sort,然後再輸入uniq。或者您可以利用sort’s 的能力來執行排序和唯一性,如下所示:

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

例子

排序 | 獨特的

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

排序 -u

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

你的例子

$ 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"

引用自:https://unix.stackexchange.com/questions/114140