Linux命令(43)——paste命令

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命令

猜你喜欢

转载自blog.csdn.net/k346k346/article/details/80241041
今日推荐