join
命令用于将两个文件中,指定栏位内容相同的行连接起来。其首先找出两个文件中指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
join [OPTION]... FILE1 FILE2
-a FILENUM
: 从FILENUM
打印不成对的行,其中FILENUM
是1
或2
,对应于FILE1
或FILE2
。-e EMPTY
: 将缺少的输入字段替换为空。-i, --ignore-case
: 比较字段时忽略大小写的差异。-j FIELD
: 相当于-1 FIELD -2 FIELD
。-o FORMAT
: 构造输出线时遵守FORMAT
。-t CHAR
: 使用CHAR
作为输入和输出字段分隔符。-v FILENUM
: 类似于-a FILENUM
,但不连接输出行。-1 FIELD
: 加入文件1
的这个FIELD
。-2 FIELD
: 加入文件2
的这个FIELD
。--check-order
: 检查输入是否正确排序,即使所有输入行都可以配对。--nocheck-order
: 不要检查输入是否正确排序。--header
: 将每个文件的第一行视为字段标题,无需尝试将它们配对即可打印它们。--help
: 显示帮助信息。--version
: 显示版本信息。
file1.txt
与file2.txt
文件内容如下:
# file1.txt
1 AAYUSH
2 APAAR
3 HEMANT
4 KARTIK
5 TIM
# file2.txt
1 101
2 102
3 103
4 104
使用join
命令合并文件,为了合并两个文件,文件必须具有一些公共字段,此时两个文件中的公共字段均带有编号1、2...
。
join file1.txt file2.txt
# 1 AAYUSH 101
# 2 APAAR 102
# 3 HEMANT 103
# 4 KARTIK 104
使用-a
选项打印FILE1
中已成对的行并链接以及不成对的行。
join file1.txt file2.txt -a 1
# 1 AAYUSH 101
# 2 APAAR 102
# 3 HEMANT 103
# 4 KARTIK 104
# 5 TIM
使用-v
选项打印FILE1
中不成对的行。
join file1.txt file2.txt -v 1
# 5 TIM
join
会在第一个公共字段上组合文件行,该字段是默认值。但是这两个文件中的公共值不一定总是第一个列,所以join
可以使用-1, -2
指定公共值位置。-1
和-2
表示第一个和第二个文件,这些选项需要一个数字参数,该参数引用相应文件的连接字段。
`file1.txt`与`file2.txt`文件内容如下:
# file1.txt
AAYUSH 1
APAAR 2
HEMANT 3
KARTIK 4
TIM 5
# file2.txt
101 1
102 2
103 3
104 4
join -1 2 -2 2 file1.txt file2.txt
# 1 AAYUSH 101
# 2 APAAR 102
# 3 HEMANT 103
# 4 KARTIK 104
对于上面的示例,我们直接使用-j
参数也可以实现。
join -j 2 file1.txt file2.txt
# 1 AAYUSH 101
# 2 APAAR 102
# 3 HEMANT 103
# 4 KARTIK 104
https://github.com/WindrunnerMax/EveryDay
https://www.computerhope.com/unix/ujoin.htm
https://www.runoob.com/linux/linux-comm-join.html
https://www.geeksforgeeks.org/join-command-linux/