UNIX 文字工具: 左右合併

如果 FA 和 FB 是兩個純文字檔案,則

paste FA FB
就是將 FA 和 FB 左右合併印到 stdout,兩者之間以一個跳格隔開。 如果 FA 的列數比 FB 多,則多出的那幾列就自己印出來。反之亦然。 例如
paste indian.txt student.dat
的結果就是
one little      87250500 蔡君宗 M caijz
two little      87113600 鄒男鈞 M zounj
three little Indians    87015800 褚永培 F chuyp
four little     87007900 周淑文 F zhousz
five little     87114100 杜霖雅 F dulx
six little Indians      86014000 徐珍聖 M xuzs
seven little    86110900 王琇凱 M wangxk
eight little
nine little Indians
ten little Indian boys

根據 paste 的設計,它一定要有兩個輸入檔案才行。 如果其中一個檔案名是 - 減號,代表它來自 stdin。 例如

cat -n indian.txt | head -7 | paste - student.dat | expand
就得到
     1  one little      87250500 蔡君宗 M caijz
     2  two little      87113600 鄒男鈞 M zounj
     3  three little Indians    87015800 褚永培 F chuyp
     4  four little     87007900 周淑文 F zhousz
     5  five little     87114100 杜霖雅 F dulx
     6  six little Indians      86014000 徐珍聖 M xuzs
     7  seven little    86110900 王琇凱 M wangxk
經過簡單的編輯,就可以把這個輸出結果排整齊。

如果不要用跳格做分隔符號,可以用 -d (delimiter) 參數自己指定。 例如

head -7 indian.txt | paste -d : - student.dat | expand
就得到
one little:87250500 蔡君宗 M caijz
two little:87113600 鄒男鈞 M zounj
three little Indians:87015800 褚永培 F chuyp
four little:87007900 周淑文 F zhousz
five little:87114100 杜霖雅 F dulx
six little Indians:86014000 徐珍聖 M xuzs
seven little:86110900 王琇凱 M wangxk

paste 的 - 減號還有一個用途,就是當您寫兩個 - 或是三個 - 的時候, 代表要將 stdin 進來的檔案排成兩行或三行。 例如

sort student.dat | paste - -
就得到
86014000 徐珍聖 M xuzs  86110900 王琇凱 M wangxk
87015800 褚永培 F chuyp 87007900 周淑文 F zhousz
87113600 鄒男鈞 M zounj 87114100 杜霖雅 F dulx
87250500 蔡君宗 M caijz

讀者或許要問,前面 paste - - 的兩行排法是

    1    2
    3    4
    5    6
如果想要
    1    4
    2    5
    3    6
該怎麼辦呢? 這類問題,可以在學習了完整的 awk 程式語言之後輕易解決。 我們留給讀者日後慢慢學習。

習題

[ 前一節 ]‧[ 後一節 ]‧[ 回目錄 ]



注意:此處所有文件均為原著,個別的版權宣告日後會一一公布, 整體版面設計亦尚未完成。但仍請勿抄襲文字與圖片,以免觸犯著作權法。

Created: Nov 19, 2000
Last Revised: Nov 19, 2000
© Copyright 2000 Wei-Chang Shann 單維彰

shann@math.ncu.edu.tw