paste命令_Linux paste命令:合并(拼接)文件

paste 的拼接原理是什么?这个很简单,和 cut 的原理几乎一样,就是将几个文件的相应行用制表符(Tab)连接起来,并输出到标准输出。

我们来看 paste 最简单的使用方法:

#第一个文件, 含有三行内容[roc@roclinux ~]$ cat p1.txt123 #第二个文件, 也含有三行内容[roc@roclinux ~]$ cat p2.txtabc #拼接两个文件[roc@roclinux ~]$ paste p1.txt p2.txt1    a2    b3    c #可以看出, paste使用了制表符(Tab)作为间隔符[roc@roclinux ~]$ paste p1.txt p2.txt|sed -n l1\ta$2\tb$3\tc$

可以看到,paste 将两个文件的对应行用制表符进行了拼接。

两个行数不同的文件如何拼接

对于行数不同的两个文件,paste 采用尽力拼接的原则,对于超出的行,则只能单独展示了,毕竟巧妇难为无米之炊嘛。我们来看一个例子:

#第一个文件, 有5行[roc@roclinux ~]$ cat s1.txtabcde #第二个文件, 有3行[roc@roclinux ~]$ cat s2.txt123 #拼接s1和s2[roc@roclinux ~]$ paste s1.txt s2.txta       1b       2c       3de #拼接s2和s1, 注意, 参数的顺序对输出是有影响的[roc@roclinux ~]$ paste s2.txt s1.txt1       a2       b3       c        d        e

应该不需要再解释了,例子已经把 paste 的拼接原理展示得淋漓尽致了。

三个文件能 paste 么

刚才的例子是 paste 两个文件,那三个文件可以 paste 么?当然可以,看看例子吧:

#这是第三个文件, 也有3行[roc@roclinux ~]$ cat p3.txtIIIIII #按p1、p2、p3的顺序拼接[roc@roclinux ~]$ paste p1.txt p2.txt p3.txt1    a    I2    b    II3    c    III #按p3、p2、p1的顺序拼接[roc@roclinux ~]$ paste p3.txt p2.txt p1.txtI    a    1II   b    2III  c    3

paste 好强大,多个文件,照样能够按行拼接。而且会发现,paste 拼接是和文件列表的顺序有关的。

paste 的拼接符只能是制表符么

我不想用制表符来间隔,我想用星号(*)来间隔,可以么?答案是可以的,使用-d选项就可以设定间隔符。来一起看看例子:

[roc@roclinux ~]$ paste -d '*' p3.txt p2.txt p1.txtI*a*1II*b*2III*c*3

要注意一点,此处一定要把星号用引号括起来(单引号双引号均可),否则 Shell 会把星号扩展为当前目录下的文件列表,千万小心。

说说 paste 命令的 -s 选项

“示例”胜于雄辩,我们通过例子来解释-s选项的作用:

#这是第一个文件[roc@roclinux ~]$ cat p1.txt123 #这是第二个文件[roc@roclinux ~]$ cat p2.txtabc 这是第三个文件[roc@roclinux ~]$ cat p3.txtIIIIII #我们使用了-s选项, 注意观察[roc@roclinux ~]$ paste -s -d "*" p1.txt p2.txt p3.txt1*2*3a*b*cI*II*III

这下看懂了吧,-s就是以每个文件自身为一个处理单元,将此文件中的所有行以-d选项设定的间隔符拼接成一大行,并输出到标准输出中。

好了,paste 命令我们就介绍到这里了,几个知识点都不复杂,相信聪明的你早已经掌握了。

(0)

相关推荐