paste 命令

linux下命令使用详解---合并文件的列

 

功能说明:合并文件的列。

 

语  法:paste [-s][-d ][--help][--version][文件...]

补充说明:paste指令会把每个文件以列对列的方式,一列列地加以合并。

参  数:

 -d或--delimiters=  用指定的间隔字符取代跳格字符。

 -s或--serial  串列进行而非平行处理。

 --help  在线帮助。

 --version  显示帮助信息。

 

例:

 

1.paste的拼凑原理是什么?

 

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

 

paste最简单的使用方法是:

 

[rocrocket@rocrocket programming]$ cat p1.txt

 

123[rocrocket@rocrocket programming]$ cat p2.txt

a

b

c

[rocrocket@rocrocket programming]$ paste p1.txt p2.txt

1    a

2    b

3    c

[rocrocket@rocrocket programming]$ paste p1.txt p2.txt|sed-n l

1ta$

2tb$

3tc$

看到制表符了吧,它就是默认的间隔符。

 

2 上面的例子是两个文件的,那三个文件呢?

 

当然也可以了。看看例子吧:

 

[rocrocket@rocrocket programming]$ cat p3.txt

I

II

III

[rocrocket@rocrocket programming]$ paste p1.txt p2.txt p3.txt

1    a    I

2    b    II

3    c    III

[rocrocket@rocrocket programming]$ paste p3.txt p2.txt p1.txt

I    a    1

II   b    2

III  c    3

可见paste的结果是和文件列表的顺序有关的。

 

3 我不想用制表符来间隔,我想用星号(*),可以么?

 

行的!使用-d符号就可以设定间隔符,这和cut没有两样。看看例子:

 

[rocrocket@rocrocket programming]$ paste -d'*' p3.txt p2.txt p1.txt

I*a*1

II*b*2

III*c*3

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

 

4 我看过paste命令的man,里面提到了一个-s选项,我不懂是什么意思?

 

这个很好解释,继续上面的例子,看看这个命令:

 

[rocrocket@rocrocket programming]$ paste -s-d"*" p3.txt p2.txt p1.txt

I*II*III

a*b*c

1*2*3

呵呵,懂了吧,-s就是以每个文件为一个处理单元,将其中的所有行以-d设定的间隔符相连接组成一大行,输出到标准输出中。