【Linux疑難雜症】Linux如何快速檢查csv某個欄位值是否重複

閱讀時間約 2 分鐘
raw-image



情境描述

小明身為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

檢查「Name」欄位是否重複

我們會用到的招式有「剪欄位、排序、重複」 , 對應到Linux的指令有「cut、sort、uniq」, 透過這三個工具的組合技巧就能夠讓我們快速檢測出欄位值是否有重複。

使用「cut」擷取特定欄位

這邊我們要擷取的是第一欄

cut -d ',' -f 1 test.csv

結果

Name
John
Amy
John

使用「sort」排序這些值

cut -d ',' -f 1 test.csv|sort

結果

Amy
John
John
Name

使用「uniq」來顯示重複值

-d 選項告訴 uniq 只顯示重複的值。

cut -d ',' -f 1 test.csv | sort | uniq -d

結果

John

結語

原來許多小技巧的文字處理都能夠直接用原生的Linux功能處理, 當越來越多的大型系統都使用Linux作業系統時, 我們也應該具備一些強大的工具技能, 就讓我們慢慢的掌握這些小技巧吧!

113會員
255內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言0
查看全部
發表第一個留言支持創作者!
阿Han的沙龍 的其他內容
我們在進行Linux作業時, 常常會撰寫一些腳本來進行我們的任務, 而我們執行任務當下假如沒有將當時的參數紀錄起來常常事後追朔時很容易就遺漏掉, 尤其是在AI模型訓練這一塊, 每次的訓練都是好幾個小時甚至好幾天⏱️⏱️⏱️, 我們常常會需要對模型訓練的參數與結果進行分析, 那麼蛛絲馬跡就非常重要了,
我們偶爾在Linux的Bash腳本都會看到「pushd …」、「popd」的影子, 一開始看到也覺得這是什麼碗粿…, 這樣很難讀耶, 但指令被發明出來一定是有它存在的意義與道理的, 我們不能因為未知就直覺的認為該指令毫無作用, 而是要在正確的情境之下去使用。 pushd與popd我們就理解
我們執行應用程式的時候,如果應用程式存在著BUG導致系統沒有回應時,在Windows體系之下我們可以用「Ctrl + Alt + Delete」開啟工作管理員並找到該程式進行強制終止,但Linux呢? 我們來看看究竟要如何下指令來強制終止吧! 第一式: 逐個突破 我們的程式發生問題導致系統延宕時
相信Docker近幾年已經是IT與軟體開發者最常使用的一套虛擬系統了, 詳細是什麼就不多說了, 歡迎參考「📚【Docker】初探微服務時代的虛擬化技術」, 而我們使用Docker時, 有時候因為有AI的需求,需要載入別台機器的大容量模型, 但我們又不希望整個模型搬移, 浪費了兩台的空間, 這時候就
Linux是一個非常好用、兼具效能、靈活度高的作業系統, 唯一的缺點就是學習曲線較為陡峭, 一開始難以入門, 但假若學會了, 對於我們的作業效率勢必事半功倍, 尤其是軟體工程師、IT人員…。 過程中難免遇到一些零零總總的狀況, 不過沒關係! 一項項慢慢解決即可。 前景提要 有一天,工程
講到Docker之前就必須先談談容器化, 容器化是一種軟體開發的方法, 將程式、依賴及組態封裝在映像檔之中, 那映像檔對於大部份的人來說一定非常的熟悉, 尤其是VM這個詞, 虛擬化技術的先行者, 有了這項技術之後, 我們就可以減少一些因為環境產生的問題導致難以排查程式錯誤的狀況, 甚至可以避免因為A
我們在進行Linux作業時, 常常會撰寫一些腳本來進行我們的任務, 而我們執行任務當下假如沒有將當時的參數紀錄起來常常事後追朔時很容易就遺漏掉, 尤其是在AI模型訓練這一塊, 每次的訓練都是好幾個小時甚至好幾天⏱️⏱️⏱️, 我們常常會需要對模型訓練的參數與結果進行分析, 那麼蛛絲馬跡就非常重要了,
我們偶爾在Linux的Bash腳本都會看到「pushd …」、「popd」的影子, 一開始看到也覺得這是什麼碗粿…, 這樣很難讀耶, 但指令被發明出來一定是有它存在的意義與道理的, 我們不能因為未知就直覺的認為該指令毫無作用, 而是要在正確的情境之下去使用。 pushd與popd我們就理解
我們執行應用程式的時候,如果應用程式存在著BUG導致系統沒有回應時,在Windows體系之下我們可以用「Ctrl + Alt + Delete」開啟工作管理員並找到該程式進行強制終止,但Linux呢? 我們來看看究竟要如何下指令來強制終止吧! 第一式: 逐個突破 我們的程式發生問題導致系統延宕時
相信Docker近幾年已經是IT與軟體開發者最常使用的一套虛擬系統了, 詳細是什麼就不多說了, 歡迎參考「📚【Docker】初探微服務時代的虛擬化技術」, 而我們使用Docker時, 有時候因為有AI的需求,需要載入別台機器的大容量模型, 但我們又不希望整個模型搬移, 浪費了兩台的空間, 這時候就
Linux是一個非常好用、兼具效能、靈活度高的作業系統, 唯一的缺點就是學習曲線較為陡峭, 一開始難以入門, 但假若學會了, 對於我們的作業效率勢必事半功倍, 尤其是軟體工程師、IT人員…。 過程中難免遇到一些零零總總的狀況, 不過沒關係! 一項項慢慢解決即可。 前景提要 有一天,工程
講到Docker之前就必須先談談容器化, 容器化是一種軟體開發的方法, 將程式、依賴及組態封裝在映像檔之中, 那映像檔對於大部份的人來說一定非常的熟悉, 尤其是VM這個詞, 虛擬化技術的先行者, 有了這項技術之後, 我們就可以減少一些因為環境產生的問題導致難以排查程式錯誤的狀況, 甚至可以避免因為A
你可能也想看
Google News 追蹤
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
經過試用之後,如果覺得滿意,就可以考慮將系統安裝到硬碟裡了。安裝到硬碟的好處是可以充分發揮電腦硬體效能,不用再被外接式裝置拖累速度。此外,設定和檔案都可以保留,使用體驗也會比較完整。
Linux FAQ : ps 顯示的 stat 簡介 參考 : https://unix.stackexchange.com/questions/18474/what-does-this-process-stat-indicates
df 卡住大多是掛載磁碟異常 ( mount ) 可以改使用 df -l ( 查看本地磁碟 ) 查看掛載磁碟 mount | column -t 參考 : https://www.gushiciku.cn/pl/pIst/zh-tw 取消掛載磁碟 umount 位置
垂直加總資料 參考 : https://blog.longwin.com.tw/2009/02/bash-sum-use-awk-2009/ 若數字太大,出現 E 的符號,可以用 printf 來印
Linux FAQ : 給予顯示文字色彩 參考 : https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
Linux FAQ : grep 搜尋檔案內容 grep -i 不區分大小寫 grep -v 排除條件顯示 grep -l 顯示符合的檔名 grep -n 顯示條件在第幾行 grep -q 顯示 0 , 1 ( 檢查 $? , 0 is successful ) grep -x 整行完全符合才顯示
Thumbnail
Linux FAQ : 查看 jar 檔方式 jar 檔其實類似 zip 壓縮檔 除了可以用 zip 軟體來打開 在 Linux 可以用一些指令輔助
Linux FAQ : ls , cp , rm Argument list too long 在使用 Linux 如大量檔案 ls 查看 cp 複製 rm 清理 可能會遇到了 Argument list too long 大約 10 萬筆以上檔案 就可能會看到此訊息
最近發現MySQL用timestamp自動設定的現在時間CURRENT_TIMESTAMP,會慢八個小時,紀錄一下怎麼解的: 解決MySQL用timestamp自動設定的現在時間,會慢八個小時的問題: mysql > set global time_zone='+8:00';   // UTC+8為
Thumbnail
接下來第二部分我們持續討論美國總統大選如何佈局, 以及選前一週到年底的操作策略建議 分析兩位候選人政策利多/ 利空的板塊和股票
Thumbnail
🤔為什麼團長的能力是死亡筆記本? 🤔為什麼像是死亡筆記本呢? 🤨作者巧思-讓妮翁死亡合理的幾個伏筆
Thumbnail
經過試用之後,如果覺得滿意,就可以考慮將系統安裝到硬碟裡了。安裝到硬碟的好處是可以充分發揮電腦硬體效能,不用再被外接式裝置拖累速度。此外,設定和檔案都可以保留,使用體驗也會比較完整。
Linux FAQ : ps 顯示的 stat 簡介 參考 : https://unix.stackexchange.com/questions/18474/what-does-this-process-stat-indicates
df 卡住大多是掛載磁碟異常 ( mount ) 可以改使用 df -l ( 查看本地磁碟 ) 查看掛載磁碟 mount | column -t 參考 : https://www.gushiciku.cn/pl/pIst/zh-tw 取消掛載磁碟 umount 位置
垂直加總資料 參考 : https://blog.longwin.com.tw/2009/02/bash-sum-use-awk-2009/ 若數字太大,出現 E 的符號,可以用 printf 來印
Linux FAQ : 給予顯示文字色彩 參考 : https://stackoverflow.com/questions/5947742/how-to-change-the-output-color-of-echo-in-linux
Linux FAQ : grep 搜尋檔案內容 grep -i 不區分大小寫 grep -v 排除條件顯示 grep -l 顯示符合的檔名 grep -n 顯示條件在第幾行 grep -q 顯示 0 , 1 ( 檢查 $? , 0 is successful ) grep -x 整行完全符合才顯示
Thumbnail
Linux FAQ : 查看 jar 檔方式 jar 檔其實類似 zip 壓縮檔 除了可以用 zip 軟體來打開 在 Linux 可以用一些指令輔助
Linux FAQ : ls , cp , rm Argument list too long 在使用 Linux 如大量檔案 ls 查看 cp 複製 rm 清理 可能會遇到了 Argument list too long 大約 10 萬筆以上檔案 就可能會看到此訊息
最近發現MySQL用timestamp自動設定的現在時間CURRENT_TIMESTAMP,會慢八個小時,紀錄一下怎麼解的: 解決MySQL用timestamp自動設定的現在時間,會慢八個小時的問題: mysql > set global time_zone='+8:00';   // UTC+8為