Sort

sort 查找特定列中有多少不同的值

  • January 31, 2018

例如,這是 list.txt

Joe 3
Jack 1
Ulysses 6
Fox 2
Cassidy 1
Jones 6
Kevin 7

那麼輸出應該是5因為第二列中有5個不同的值。

我應該如何僅通過使用來完成此操作sort cut wc uniq

我有個想法,先用sort -k2n升序對第二列進行排序,然後再用uniq消除第二列的重複行,結果會是這樣

Cassidy 1
Fox 2
Joe 3
Jones 6
Kevin 7

然後我cut -d ' ' -f2用來列出所有的數字1 2 3 6 7 ,然後我wc -d用來計算不同值的數量,這將返回5.

我應該在uniq部分中做什麼來消除具有相同編號的重複行?

有沒有一種簡單的方法可以做到這一點?

我會開始,cut因為您只關心第 2 列中的唯一性:

cut -d' ' list.txt

結果是:

1
2
1
3
6
7
6

現在你想要獨特的價值;uniq 會這樣做,但前提是它已排序。如果要排序,請繼續使用 sort 的 -u 標誌:

cut -d' ' -f2 list.txt | sort -u

結果是:

1
2
3
6
7

現在您可以使用它wc來計算輸出的行數:

cut -d' ' -f2 list.txt | sort -u  | wc -l

這給了你:

5

請注意,我們依賴於 list.txt 文件的特定格式——人名中沒有空格!

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