linux下join与paste命令的用法

发布时间:2020-03-28编辑:脚本学堂
本文介绍下,linux中二个命令join与paste的用法,它们主要用来字符串的拼接与分隔操作,有需要的朋友,作个参考吧。

先来看命令paste。
paste将几个文件的相应行用制表符连接起来,并输出到标准输出。
paste [选项] file1 file2
-d 指定不同于空格或tab键的域分隔符。例如用#分隔域,使用-d#
-s 将每个文件合并成行而不是按行粘
paste -d# name.txt home.txt

再来看join命令。
join将两个文件中,指定栏位内容相同的行连接起来。
join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][--help][--version][文件1][文件2]
  -a<1或2>   除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
  -e<字符串>   若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
  -i         比较栏位内容时,忽略大小写的差异。
  -o<格式>   按照指定的格式来显示结果。
  -t<字符>   使用栏位的分隔字符。
  -v<1或2>   跟-a相同,但是只显示文件中没有相同栏位的行。
  -1<栏位>   连接[文件1]指定的栏位。
  -2<栏位>   连接[文件2]指定的栏位。

下面举一些例子,以帮助大家的理解。
 

复制代码 代码示例:

[root@jbxue ~]# cat names
Tony
Emanuel
Lucy
Ralph
Fred

[root@jbxue ~]# cat numbers
(307) 555-5356
(212) 555-3456
(212) 555-9959
(212) 555-7741
(212) 555-0040

2,将两个文件合并,中间用tab键分隔开。
 

复制代码 代码示例:

[root@jbxue ~]# paste names numbers
Tony      (307) 555-5356
Emanuel   (212) 555-3456
Lucy      (212) 555-9959
Ralph    (212) 555-7741
Fred     (212) 555-0040

[root@jbxue ~]# cat addresses
55-23 Vine Street, Miami
39 University Place, New York
17 E. 25th Street, New York
38 Chauncey St., Bensonhurst
17 E. 25th Street, New York

3,将 三个文件合并。
 

复制代码 代码示例:

[root@jbxue ~]# paste names addresses numbers
Tony    55-23 Vine Street, Miami        (307) 555-5356
Emanuel         39 University Place, New York   (212) 555-3456
Lucy    17 E. 25th Street, New York     (212) 555-9959
Ralph   38 Chauncey St., Bensonhurst    (212) 555-7741
Fred    17 E. 25th Street, New York     (212) 555-0040

[root@jbxue ~]# cat employee.txt
100 Jason Smith
200 John Doe
300 Sanjay Gupta
400 Ashok Sharma

[root@jbxue ~]# cat bonus.txt
100 $5,000
200 $500
300 $3,000
400 $1,250

[root@jbxue ~]# join employee.txt bonus.txt
100 Jason Smith  $5,000
200 John Doe  $500
300 Sanjay Gupta  $3,000
400 Ashok Sharma $1,250