合併多個有相同表頭的CSV文件-秒速完成的shell指令

邱國欣(Andy Chiu)
7 min readOct 31, 2020

--

在<還在複製+貼上?這才是合併多個Excel最簡方法 — shell程序的cat指令『秒速』完成>文章中,分享了利用shell的cat語句合併數據表,經過好心網友的提點,該方法忽略了幾個背景:

  • 文件必須為csv,Excel文件一般是.xlsx,則需要另存新檔為csv格式
  • cat是簡單合併,若合併幾個csv都有表頭的話,也都會合併進去

如果每個csv都有表頭的話又要怎麼處理呢?本文補充分享一個也是滿簡單的寫法。

邀請你至Blog閱讀全文:合併多個相同欄位的CSV文件-秒速完成的shell指令

如果你喜歡我的文章,也邀請你訂閱『Rock Data』電子報,支持我持續創作

1. Hello All:主站遷移至👉https://andyrockdata.com/ ,請改至『ROCK DATA』Blog 閱讀新文章完整內容,如果喜歡我的文章,可以訂閱我的電子報(Medium站仍將張貼新文章訊息)2.立即追蹤👉ROCK DATA臉書粉絲頁ROCK DATA IG(@andyrockdata)3.【入門數據分析,掌握HiveSQL取數能力】在hahow上架啦,購買連結👉 http://hahow.in/cr/andyrockhive4. 半佛系鼓掌:原來只要滑鼠一直按著不放就可以一直鼓掌了。那請你按久一點:)有任何想法或感興趣的地方歡迎留言/討論,或者私訊我!5. 往期的數據相關文章可以參考以下link

背景回顧:在Desktop中,有一個shell_bind的文件夾,裡面有3個csv,分別是bind_01 , bind_02 , bind_03, 要合併起來,生成bind_all文件

Step0. 指定文件的目錄

cd ~/Desktop/shell_bind

Step1. 從任意一個csv取出表頭(也就是第一條數據),並寫到要輸出的表(bind_all.csv)

head -n +1  bind_01.csv > bind_all.csv

Step2. bind_01~bind_03這三張表取除了表頭的所有數據(就是除了第一行以下),追加進bind_all.csv

tail -n +2 -q bind_0*.csv >> bind_all.csv

代碼說明:

  • head -n +1 表示print文件從頭數下來第一行
  • tail -n +2 表示print文件從尾部到第二行
  • -q表示不要print文件名
  • >>表示對bind_all追加數據,而>則是會覆蓋原數據
  • *表示前一个字符匹配 0 次或任意多次,在這例子中bind_0*.csv即為bind_01 ,bind_02 ,bind_03

其中-q 是比較容易忽略的,若是沒寫-q,輸出bind_all會長這樣

我們可以用()把step1 跟step2兩個命令合再一起執行:

( head -n+1 bind_01.csv ; tail -n+2 -q bind_0*.csv ) > bind_all.csv

邀請你至Blog閱讀全文:合併多個相同欄位的CSV文件-秒速完成的shell指令

如果你喜歡我的文章,也邀請你訂閱『Rock Data』電子報,支持我持續創作

1. Hello All:主站遷移至👉https://andyrockdata.com/ ,請改至『ROCK DATA』Blog 閱讀新文章完整內容,如果喜歡我的文章,可以訂閱我的電子報(Medium站仍將張貼新文章訊息)2.立即追蹤👉ROCK DATA臉書粉絲頁ROCK DATA IG(@andyrockdata)3.【入門數據分析,掌握HiveSQL取數能力】在hahow上架啦,購買連結👉 http://hahow.in/cr/andyrockhive4. 半佛系鼓掌:原來只要滑鼠一直按著不放就可以一直鼓掌了。那請你按久一點:)有任何想法或感興趣的地方歡迎留言/討論,或者私訊我!5. 往期的數據相關文章可以參考以下link

--

--

邱國欣(Andy Chiu)
邱國欣(Andy Chiu)

Written by 邱國欣(Andy Chiu)

文章內容以數據為主軸,分享工作跟生活的心得與總結,希望我的經歷,可以或多或少幫助到大家。如果你熱愛你所做的事,那麼你肯定會暫時遺忘了時間!「 ROCK DATA | 玩搖滾的數據人 」Blog:https://www.andyrockdata.com

No responses yet