1.功能
paste命令将多个文件的相应行默认以Tab分隔符横向连接起来,输出到标准输出。paste后可接多个文件,不限于2个文件。如果文件写成“-”,表示内容来自标准输入。paste相对于join来说,简单许多,不需要有相同的字段才能按行连接。
2.格式
pasete [选项] [file1 ...]
3.选项说明
-d,--delimiters=[LIST]:用指定的域分隔隔符取代Tab。
-s,--serial:顺序地合并一个文件的所有行到一行。
--help:显示帮助信息。
--version:显示版本。
4.示例
有两个文件file1.txt和file2.txt,内容如下:
#file1内容
[root@tencent ~]# cat file1.txt
abc
def
ghi
#file2内容
[root@tencent ~]# cat file2.txt
123
456
789
012
(1)将文件file1.txt的所有行合并到一行。
[root@tencent ~]# paste -s file1.txt
abc def ghi
#指定域分隔符为:
[root@tencent ~]# paste -s file1.txt
abc:def:ghi
(2)将多个文件的所有行分别合并为一行。
[root@tencent ~]# paste -s file1.txt file2.txt
abc def ghi
123 456 789 012
(3)横向连接两个文件,默认以Tab分隔。
[root@tencent ~]# paste file1.txt file2.txt
[root@tencent ~]# paste a.txt 1.txt
abc 123
def 456
ghi 789
012
#通过交换文件名可指定列的位置
[root@tencent ~]# paste file2.txt file1.txt
123 abc
456 def
789 ghi
012
(4)paste黏贴的内容(行)从标准输入读取,此时可以使用“-”来指代。例如查看/etc下的文件列表,并用paste打印成每行显示五个文件名。
[root@tencent ~]# ls /etc/ | paste -d: - - - - -
cpi:adjtime:aliases:alternatives:anacrontab
anthy-conf:asound.conf:at.deny:audisp:audit
bash-command-not-found:bash_completion.d:bashrc:blkid:bonobo-activation
...
5.注意事项
如果文件格式是DOS,即文件换行符是\r\n,那么会出现内容覆盖的情况。比如 file1.txt和file2.txt格式是DOS,那么paste这两个文件会出现如下情况:
[root@tencent ~]# paste file1.txt file2.txt
:123
:456
:789
:012
从结果可以看出,来自file1.txt的行被file2.txt的行覆盖,解决办法是,使用vim的末行命令:set ff=unix
将文本格式改为Unix。
参考文献
[1]man paste
[2]Shell基础之-paste命令