需求

  • 假如有两个文件name.txt和tel.txt,它们分别记录了员工的姓名和电话,如果需要把两个文件中的用户名和电话一一对应起来,怎么操作

    解决方案

  • 可以使用paste命令,它会把不同文件中的相同行连接起来
    [root@akuilinux01 shellXT]# cat -n name.txt
     1  曹操
     2  刘备
     3  孙权
     4  周瑜
     5  诸葛亮
     6  司马懿
     7  关羽
     8  张飞
     9
    [root@akuilinux01 shellXT]# cat -n tel.txt
     1  13088888888
     2  13066666666
     3  13044444444
     4  13022222222
     5  13011111111
     6  13055555555
     7  13033333333
     8  13077777777
    #使用冒号连接两个文件对应的行
    [root@akuilinux01 shellXT]# paste -d ':' name.txt tel.txt |cat -n
     1  曹操:13088888888
     2  刘备:13066666666
     3  孙权:13044444444
     4  周瑜:13022222222
     5  诸葛亮:13011111111
     6  司马懿:13055555555
     7  关羽:13033333333
     8  张飞:13077777777
     9  :

    讨论

  • paste命令正好与cut相反,可以把多个文件连接起来,-d参数指定分隔符,如果不指定默认TAB字符连接,如:
    [root@akuilinux01 shellXT]# paste name.txt tel.txt |cat -n
     1  曹操    13088888888
     2  刘备    13066666666
     3  孙权    13044444444
     4  周瑜    13022222222
     5  诸葛亮  13011111111
     6  司马懿  13055555555
     7  关羽    13033333333
     8  张飞    13077777777
     9
  • paste命令还可以把文件的内容与标准输入中的数据连接起来,如下面的命令把name.txt和tel.txt连接以后的结果有何name.txt连接在一起
    [root@akuilinux01 shellXT]# paste -d'<' name.txt tel.txt |paste -d'>' - name.txt |cat -n
     1  曹操<13088888888>曹操
     2  刘备<13066666666>刘备
     3  孙权<13044444444>孙权
     4  周瑜<13022222222>周瑜
     5  诸葛亮<13011111111>诸葛亮
     6  司马懿<13055555555>司马懿
     7  关羽<13033333333>关羽
     8  张飞<13077777777>张飞
     9  <>
  • 第二个paste命令的参数横杠-是用来表示从标准输入中读取数据,而此时的标准输入时从管道传递过来的上一个paste命令连接的结果,因此第二个paste命令会把上一次连接的结果与name.txt的内容进行再次连接。两次连接分别用字符<和>作为分隔符。