paste命令_Linux paste命令:合併(拼接)檔案

2020-07-16 10:04:31
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 命令我們就介紹到這裡了,幾個知識點都不複雜,相信聰明的你早已經掌握了。