Linux常用命令-join

命令

join

描述

join lines of two files on a common field
合并两个文件中包含公共字段的行

用法

1
join [OPTION]... FILE1 FILE2

选项

1
2
3
4
5
6
7
8
9
Options:
-a FILENUM 如果两个文件中存在字段不匹配的行,则选择以哪个为准,FILENUM可选参数只能是1或2,即-a1或-a2
-i 忽略大小写
-j FIELD 等同于'-1 FIELD -2 FIELD'
-o FORMAT 指定显示格式,如1.1表示文件1的第1列字段,2.3表示文件2的第3列字段
-t CHAR 指定分隔符,默认是空格为分隔符
-v FILENUM 类似-a选项,但是只显示字段不匹配的行,FILENUM可选参数只能是-v1或-v2
-1 FIELD 以文件1的哪一列字段为准
-2 FIELD 以文件2的哪一列字段为准

注意

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
$ more a
1 a1
2 a2
3 a3
$ more b
1 b1
2 b2
3 b3
4 b4
# 合并有相同字段的行
$ join a b
1 a1 b1
2 a2 b2
3 a3 b3
# 以文件2为准显示所有内容
$ join -a2 a b
1 a1 b1
2 a2 b2
3 a3 b3
4 b4
# 合并两个文件中有相同字段的行,并且显示所有不同字段的行
$ join -a1 -a2 a b
1 a1 b1
2 a2 b2
3 a3 b3
4 b4
5 a5
# 以文件2为准显示不同的行
$ join -v2 a b
4 b4
# 显示文件1的第1-2列字段,1.1表示文件1的第1列字段,1.2表示第2列,以此类推
$ join -o 1.1 1.2 a b
1 a1
2 a2
3 a3
# 显示文件1的第1-2列字段,同时显示文件2的第2列字段
$ join -o 1.1 1.2 2.2 a b
1 a1 b1
2 a2 b2
3 a3 b3
# 以文件1的第1列字段为准合并匹配的行,有些文件可能是其他列字段匹配
$ join -1 1 a b
1 a1 b1
2 a2 b2
3 a3 b3
# 默认是空格为分隔符,如果文件中是其他符号作为分隔符的话,需要指定-t选项
$ more a
1:a1
2:a2
3:a3
5:a5
$ more b
1:b1
2:b2
3:b3
4:b4
$ join -t: a b
1:a1:b1
2:a2:b2
3:a3:b3