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

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

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

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


背景回顧:在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_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

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.