Bash

“sort -u”和“sort | uniq”有什麼區別?

  • November 23, 2021

我到處看到有人需要得到一個排序的、唯一的列表,他們總是通過管道傳輸到sort | uniq. 我從未見過有人使用的任何範例sort -u。為什麼不?有什麼區別,為什麼使用 uniq 比使用唯一標誌進行排序更好?

sort | uniq以前存在sort -u,並且與更廣泛的系統兼容,儘管幾乎所有現代系統都支持-u——它是 POSIX。這主要是對不存在的日子的回歸sort -u(如果他們知道的方式繼續有效,人們不會傾向於改變他們的方法,只需看看ifconfigip採用的對比)。

兩者很可能合併,因為刪除文件中的重複項需要排序(至少在標準情況下),並且是排序的一個極其常見的案例。由於能夠同時執行這兩個操作(並且由於它不需要在 和 之間進行 IPC),因此它在內部也uniq更快sort。特別是如果文件很大,sort -u可能會使用更少的中間文件來對數據進行排序。

在我的系統上,我一直得到這樣的結果:

$ dd if=/dev/urandom of=/dev/shm/file bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 8.95208 s, 11.7 MB/s
$ time sort -u /dev/shm/file >/dev/null

real        0m0.500s
user        0m0.767s
sys         0m0.167s
$ time sort /dev/shm/file | uniq >/dev/null

real        0m0.772s
user        0m1.137s
sys         0m0.273s

它也不會掩蓋 的返回碼sort,這可能很重要(在現代 shell 中,有一些方法可以得到它,例如bash’s$PIPESTATUS數組,但這並不總是正確的)。

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