paste 的拼接原理是什麼?這個很簡單,和 cut 的原理幾乎一樣,就是將幾個檔案的相應行用製表符(Tab)連線起來,並輸出到標準輸出。
我們來看 paste 最簡單的使用方法:
#第一個檔案, 含有三行內容
[[email protected] ~]$ cat p1.txt
1
2
3
#第二個檔案, 也含有三行內容
[[email protected] ~]$ cat p2.txt
a
b
c
#拼接兩個檔案
[[email protected] ~]$ paste p1.txt p2.txt
1 a
2 b
3 c
#可以看出, paste使用了製表符(Tab)作為間隔符
[[email protected] ~]$ paste p1.txt p2.txt|sed -n l
1ta$
2tb$
3tc$
可以看到,paste 將兩個檔案的對應行用製表符進行了拼接。
兩個行數不同的檔案如何拼接
對於行數不同的兩個檔案,paste 採用盡力拼接的原則,對於超出的行,則只能單獨展示了,畢竟巧婦難為無米之炊嘛。我們來看一個例子:
#第一個檔案, 有5行
[[email protected] ~]$ cat s1.txt
a
b
c
d
e
#第二個檔案, 有3行
[[email protected] ~]$ cat s2.txt
1
2
3
#拼接s1和s2
[[email protected] ~]$ paste s1.txt s2.txt
a 1
b 2
c 3
d
e
#拼接s2和s1, 注意, 引數的順序對輸出是有影響的
[[email protected] ~]$ paste s2.txt s1.txt
1 a
2 b
3 c
d
e
應該不需要再解釋了,例子已經把 paste 的拼接原理展示得淋漓盡致了。
三個檔案能 paste 麼
剛才的例子是 paste 兩個檔案,那三個檔案可以 paste 麼?當然可以,看看例子吧:
#這是第三個檔案, 也有3行
[[email protected] ~]$ cat p3.txt
I
II
III
#按p1、p2、p3的順序拼接
[[email protected] ~]$ paste p1.txt p2.txt p3.txt
1 a I
2 b II
3 c III
#按p3、p2、p1的順序拼接
[[email protected] ~]$ paste p3.txt p2.txt p1.txt
I a 1
II b 2
III c 3
paste 好強大,多個檔案,照樣能夠按行拼接。而且會發現,paste 拼接是和檔案列表的順序有關的。
paste 的拼接符只能是製表符麼
我不想用製表符來間隔,我想用星號(*)來間隔,可以麼?答案是可以的,使用
-d
選項就可以設定間隔符。來一起看看例子:
[[email protected] ~]$ paste -d '*' p3.txt p2.txt p1.txt
I*a*1
II*b*2
III*c*3
要注意一點,此處一定要把星號用引號括起來(單引號雙引號均可),否則 Shell 會把星號擴充套件為當前目錄下的檔案列表,千萬小心。
說說 paste 命令的 -s 選項
“範例”勝於雄辯,我們通過例子來解釋
-s
選項的作用:
#這是第一個檔案
[[email protected] ~]$ cat p1.txt
1
2
3
#這是第二個檔案
[[email protected] ~]$ cat p2.txt
a
b
c
這是第三個檔案
[[email protected] ~]$ cat p3.txt
I
II
III
#我們使用了-s選項, 注意觀察
[[email protected] ~]$ paste -s -d "*" p1.txt p2.txt p3.txt
1*2*3
a*b*c
I*II*III
這下看懂了吧,
-s
就是以每個檔案自身為一個處理單元,將此檔案中的所有行以
-d
選項設定的間隔符拼接成一大行,並輸出到標準輸出中。
好了,paste 命令我們就介紹到這裡了,幾個知識點都不複雜,相信聰明的你早已經掌握了。