小明身為Linux系統工程師, 目前接到一個緊急任務, 需要在客戶端確保csv表的某個欄位的值不能重複, 對於軟體工程師來說只要寫個程式就能夠解決, 但客戶端並沒有相關的程式語言啊! 這時候只能夠使用現成的工具來完成,而經驗老道的我們很快就想到了解決方法, 不要急, 就讓我們一步步說明完畢後再來細說解決方法。
首先我們假設csv表會有這樣的資料如下, 欄位包含名字、年齡、Email資訊:
Name,Age,Email
John,25,john@example.com
...
那麼假設我們今天想要針對csv表進行合併, 那麼欄位的標頭已經固定的情境之下, 為了確保合併的「名字」不要重複時, 我們可以怎麼檢查呢?
test.csv
Name,Age,Email
John,25,john@example.com
Amy,26,amy@example.com
John,25,john@example.com
我們會用到的招式有「剪欄位、排序、重複」 , 對應到Linux的指令有「cut、sort、uniq」, 透過這三個工具的組合技巧就能夠讓我們快速檢測出欄位值是否有重複。
這邊我們要擷取的是第一欄
cut -d ',' -f 1 test.csv
結果
Name
John
Amy
John
cut -d ',' -f 1 test.csv|sort
結果
Amy
John
John
Name
-d
選項告訴 uniq 只顯示重複的值。
cut -d ',' -f 1 test.csv | sort | uniq -d
結果
John
原來許多小技巧的文字處理都能夠直接用原生的Linux功能處理, 當越來越多的大型系統都使用Linux作業系統時, 我們也應該具備一些強大的工具技能, 就讓我們慢慢的掌握這些小技巧吧!