Linux join命令用于将两个文件中,指定栏位内容相同的行连接起来。
找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
语法:
join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][文件1][文件2]
参数:
- -a<1或2> 除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。
- -e<字符串> 若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串。
- -i或–igore-case 比较栏位内容时,忽略大小写的差异。
- -o<格式> 按照指定的格式来显示结果。
- -t<字符> 使用栏位的分隔字符。
- -v<1或2> 跟-a相同,但是只显示文件中没有相同栏位的行。
- -1<栏位> 连接[文件1]指定的栏位。
- -2<栏位> 连接[文件2]指定的栏位。
- –help 显示帮助。
- –version 显示版本信息
这边就拿常用的-a和-v举例子。
首先两个文本:
cat a.txt
1 a
2 a
cat b.txt
1 b
3 b
join什么参数都不加的话,显示第一列相同的行,然后将两个文本中改行的内容连接在一起。
join a.txt b.txt
1 a b
join后加-a参数的时候,显示第一列相同的行,然后将两个文本中改行的内容连接在一起。并且a后跟的值如果是1的话,就显示第一个文本中和第二个文本对不上的行。同理,如果是2的话,就显示第二个文本中和第一个文本对不上的行。
join -a1 a.txt b.txt
1 a b
2 a
join -a2 a.txt b.txt
1 a b
3 b
join后加-v参数的时候,不显示第一列相同的行,只显示不同的行。如果v之后跟的是1的话,就显示第一个文本中和第二个文本对不上的行。同理,如果是2的话,就显示第二个文本中和第一个文本对不上的行。
join -a1 a.txt b.txt
2 a
join -a2 a.txt b.txt
3 b