一、join命令
**命令功能:**将两个文件里指定栏位同样的行连接起来,即依照两个文件里共有的某一列,将相应的行拼接成一行。
用法:
join [options] file1 file2
注:
- 这两个文件必须已经在此列上是依照同样的规则进行了排序
- join默认是区分大小写的
二、常见用法
示例1:
[root@server1 ~]# cat join1
www onmpw
domain jiyi
w3 blog
join command
ls l
[root@server1 ~]# cat join2
www com
domain cn
w3 net
Join org
wc l
[root@server1 ~]# join join1 join2
www onmpw com
domain jiyi cn
w3 blog net
在join1 和join2文件中前三行的第一列的数据相等,因此会将这三行数据拼接。对于其他两行因为第一列字符串并不相等,所以也就不会拼接了
将两个文件的具有共同域的纪录连接在一起:
示例2:指定的分隔符
加参数-t
可以指定分隔符
[root@server1 ~]# join -t : file.db file_hobby.db
A li:20:men:anhui:Song
B wang:21:women:jiangsu:shopping
C zhang:22:men:anhui:pingpong
D liu:23:women:Shanghai:chess
[root@server1 ~]# cat file.db
A li:20:men:anhui
B wang:21:women:jiangsu
C zhang:22:men:anhui
D liu:23:women:Shanghai
E chen:23:women:Hefei
[root@server1 ~]# cat file_hobby.db
A li:Song
B wang:shopping
C zhang:pingpong
D liu:chess
E Wang:reading
示例3:内连接(忽略不匹配的行)
这种情况是默认的情况
[root@server1 ~]# join file1 file2
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
[root@server1 ~]# cat file1
1 一月
2 二月
3 三月
4 四月
5 五月
6 六月
7 七月
8 八月
9 九月
10 十月
11 十一月
12 十二月
13 十三月
[root@server1 ~]# cat file2
1 January
2 February
3 March
4 April
5 May
6 June
7 July
8 August
9 September
10 October
11 November
12 December
14 MonthUnknown
示例4:显示左边文件中的所有记录,右边文件中没有匹配的显示空白
[root@server1 ~]# join -a1 file1 file2
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
13 十三月
示例5:显示右边文件中的所有记录,左边文件中没有匹配的显示空白
[root@server1 ~]# join -a2 file1 file2
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
14 MonthUnknown
示例6:全连接(又称全外连接,显示左边和右边所有记录)
[root@server1 ~]# join -a1 -a2 file1 file2
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
13 十三月
14 MonthUnknown
示例7: 指定输出字段
-o 1.1
表示只输出第一个文件的第一个字段
[root@server1 ~]# join -o 1.1 file1 file2
1
2
3
4
5
6
7
8
9
10
11
12
示例8:指定输出多个字段
输出第一个文件的第一个字段,输出第二个文件第二个字段
[root@server1 ~]# join -o 1.1 2.2 file1 file2
1 January
2 February
3 March
4 April
5 May
6 June
7 July
8 August
9 September
10 October
11 November
12 December
示例9:输出第一个文件的第一个字段和第二个字段,输出第二个文件第二个字段
[root@server1 ~]# join -o 1.1 2.2 1.2 file1 file2
1 January 一月
2 February 二月
3 March 三月
4 April 四月
5 May 五月
6 June 六月
7 July 七月
8 August 八月
9 September 九月
10 October 十月
11 November 十一月
12 December 十二月
示例10: 第一个文件第三个字段不存在的情况
[root@server1 ~]# join -o 1.1 1.2 1.3 2.2 file1 file2
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
[root@server1 ~]# join -o 1.1 1.2 2.2 file1 file2
1 一月 January
2 二月 February
3 三月 March
4 四月 April
5 五月 May
6 六月 June
7 七月 July
8 八月 August
9 九月 September
10 十月 October
11 十一月 November
12 十二月 December
示例11: 指定分隔符整合文件
[root@server1 ~]# join -t ':' /etc/passwd /etc/shadow
root:x:0:0:root:/root:/bin/bash:$6$pTycYIIhMhGpyE5d$FhiVzaqbtD8DKsTyxsEUZ.zr1IUeFfbMqEZP7utQFYRwkb6VOwJ974cou2QbRHT0d.oQwhCSYxK4uEZk/pfMQ/::0:99999:7:::
bin:x:1:1:bin:/bin:/sbin/nologin:*:17492:0:99999:7:::
daemon:x:2:2:daemon:/sbin:/sbin/nologin:*:17492:0:99999:7:::
adm:x:3:4:adm:/var/adm:/sbin/nologin:*:17492:0:99999:7:::
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin:*:17492:0:99999:7:::
sync:x:5:0:sync:/sbin:/bin/sync:*:17492:0:99999:7:::
示例12: 不匹配的行输出
[root@server1 ~]# join -v 1 -a1 -a2 file1 file2
13 十三月
14 MonthUnknown
来源:CSDN
作者:CL82
链接:https://blog.csdn.net/qq_35887546/article/details/104312287