我要怎麼移除重複的列?
另一個經常和 sort 一起用的指令是 uniq,
它的工作是移除重複的列。
更精確地說,
它會移除「相鄰」的重複列。
如果檔案內容是:
2017-07-03
2017-07-03
2017-08-03
2017-08-03
那麼 uniq 會產生:
2017-07-03
2017-08-03
但如果內容是:
2017-07-03
2017-08-03
2017-07-03
2017-08-03
那 uniq 會印出全部四行。
原因是 uniq 是為了處理非常大的檔案而設計的。
若要從檔案中移除不相鄰的重複列,
它就必須把整個檔案放在記憶體中
(或至少,
把到目前為止看過的所有不重複列都放在記憶體中)。
只移除相鄰的重複時,
它只需要在記憶體中保留最近一次出現的不重複列即可。
本練習屬於課程
Shell 入門
練習說明
撰寫一個管線以:
- 取得
seasonal/winter.csv的第 2 欄, - 從輸出中移除「Tooth」這個字,讓只剩牙齒名稱,
- 將輸出排序,讓同一個牙齒名稱的所有出現相鄰;以及
- 每個牙齒名稱只顯示一次,並附上出現次數。
你的管線開頭與上一個練習相同:
cut -d , -f 2 seasonal/winter.csv | grep -v Tooth
接著加上 sort 指令,並使用 uniq -c 來顯示不重複的列與其出現次數,而不是分別使用 uniq 和 wc。
