
在<還在複製+貼上?這才是合併多個Excel最簡方法 — shell程序的cat指令『秒速』完成>文章中,分享了利用shell的cat語句合併數據表,經過好心網友的提點,該方法忽略了幾個背景:
- 文件必須為csv,Excel文件一般是.xlsx,則需要另存新檔為csv格式
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
