合併多個相同欄位的CSV文件-秒速完成的shell指令

合併多個相同欄位的CSV文件-秒速完成的shell指令

在<還在複製+貼上?這才是合併多個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

歡迎分享你的心得

🙌 你是數據分析新手嗎?入行必學SQL課程由此開始 >>>

X
Scroll to Top