2.join - join lines of two files on a common field
join命令用来将两个文件中,制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
注意:join在对两个文件进行连接时,两个文件必须都是按照连接域排好序的,按其他域排序是无效的。
[dmtsai@study ~]$ join [-ti12] file1 file2
-t :join 默认以空格符分隔数据,并且比对『第一个字段』的数据,
如果两个档案相同,则将两笔数据联成一行,且第一个字段放在第一个!
-1 :这个是数字的 1 ,代表『第一个档案要用那个字段来分析』的意思;
[root@localhost tmp]# cat join1
[root@localhost tmp]# cat join2
[root@localhost tmp]# join join1 join2 #内连接
[root@localhost tmp]# join join2 join1
adm x 4 x 3 4 adm #注意参数先后顺序的结果
#不指定任何参数的情况下使用join命令,就相当于数据库中的内连接,关键字不匹配的行不会输出。
[root@localhost tmp]# join -a1 join1 join2 #左连接
[root@localhost tmp]# join -a2 join1 join2 #右连接
[root@localhost tmp]# join -a1 -a2 join1 join2 #全连接
[root@localhost tmp]# join join1 join2
[root@localhost tmp]# join -o 1.1 1.2 1.3 join1 join2
[root@localhost tmp]# join -o 1.1 1.2 1.3 2.2 2.3 join1 join2
[root@localhost tmp]# cat joina
[root@localhost tmp]# cat joinb
[root@localhost tmp]# join -t ":" joina joinb
[root@localhost tmp]# sort -t ":" -k 3 joina >join1
[root@localhost tmp]# sort -t ":" -k 3 joinb >join2
[root@localhost tmp]# cat join1
[root@localhost tmp]# cat join2
[root@localhost tmp]# join -t ":" -j 3 join1 join2
0:root:x:0:root:root:x: #指定同一字段连接
[root@localhost tmp]# join -t ":" -1 4 -2 3 join1 join2
0:root:x:0:root:root:x: #第一个文件的第4个字段
1:bin:x:1:bin:bin:x: #与第二个文件的第3个字段连接
[root@localhost tmp]# join -t ":" -o 1.1 1.2 2.2 2.3 -e "aa" -a1 join1 join2
本章同步视频:https://edu.51cto.com/sd/e4874