Sort
sort 查找特定列中有多少不同的值
例如,這是 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 文件的特定格式——人名中沒有空格!