2013-12-04

Ubuntu 用 paste 組合多個檔案

如果你有二個文字檔,裡面各有一欄的資料,然後,需要把這二個檔案的資料合併成一個檔案的話,請問你會怎麼做呢 ? 阿舍以前就是會把這個二個檔案的資料分別貼到一個新開的 Excel 檔案的二個相鄰欄位上,然後,用另存成 CVS 檔的方式來達到合併的效果,不然,就是用類似PSPade 或 UltraEditor 的區塊功能來把兩個檔案的資料貼在一起,但是,都還是會有點小問題要人工調整的哩 !

paste 指令可以用來合併檔案
阿舍上面提到的問題,是阿舍之前在整合不同系統的報表的時候,經常會遇到的情況哩 ! 每次都要花掉阿舍不少時間來處理哩 ! 結果,沒想到,這個讓阿舍有點困擾的事,竟然在 Ubuntu 或 Linux 的系統上,只要用 1 ~ 2 行的指令就可以完美解決哩 ! ( 這也就是為什麼阿舍會開始花時間來好好學習 Ubuntu / Linux 上的指令的原故哩 ! )

在 Ubuntu 和大部份的 Linux 作業系統上,都有提供一個叫做「paste」的指令,這個指令的用途就是把一個檔案的內容「貼到」另一個檔案的內容的「右邊」,所以,阿舍就可以利用這個功能來把一個檔案的資料併到另一個檔案裡囉 ! 

paste 指令最簡單的用法,就是在 paste 指令的後面加上要合併的檔案名稱們 ( 複數,表示可合併 N 個檔案,至於到底可以一次合併多少個,阿舍也還沒試過哩 ! ),然後,paste 指令就會去把這些檔案依序給合併起來囉 ! 以阿舍有一個姓名檔和一個費用檔 (如上圖) 要合併為例,阿舍只要用下面這行指令就可以合併完成了。

paste name.txt fee.txt > name_fee.txt

用 paste 檔案合併完成的檔案,預設會是用 TAB 字元來做區隔的,因此,阿舍的檔案在合併後,就會變成下面這個樣子,但是,如果阿舍想要改成用一個空白字元或逗號來做區隔的話,那要怎麼辦呢?這個時候就會需要利用到 paste 指令的「d」選項囉 !

阿舍合併後的結果
這個 paste 指令的「d」選項是用來告訴 paste 指令要用那什麼符號來分隔合併後的資料,也就是用來指定要用什麼符號來取代掉預設的 TAB 符號來區隔資料的意思,所以,如果阿舍想要用空白字元來區隔時,就可以用下面的第一行指令,而想用逗號時,就可以用下面的第二行或第三行指令哩 !

paste -d" " name.txt fee.txt 
paste -d,  name.txt fee.txt 
paste -d","  name.txt fee.txt 

「d」選項後面所指定的區隔符號不一定要用雙引號,也就是 " " 符號包起來,但是,如果遇到像是空白字元的話,那就一定要用雙引號的哩 ! 另外,paste 指令只會取「d」選項後面的第一個字元來當做分隔號,所以,請不要和阿舍一樣,想嘗試用這個「d」選項來放多個東西在兩組資料之間哩 !... 呵 ! 

指定分隔字元的方式
上圖就是阿舍用空白字元和逗號做區隔所跑出來的檔案內容哩 ! 

推薦閱讀


有疑問? 問題還是沒解決嗎? 歡迎下方留言提問和討論 😁

沒有留言 :

張貼留言

歡迎留言提問和討論 .... 😁