Linux命令完全指南

Linux join命令使用详解

join命令 用来将两个文件中,制定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。

注意:join在对两个文件进行连接时,两个文件必须都是按照连接域排好序的,按其他域排序是无效的。

语法

1
join(选项)(参数)

选项

1
2
3
4
5
6
7
8
9
10
-a<1或2>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行;
-e<字符串>:若[文件1]与[文件2]中找不到指定的栏位,则在输出中填入选项中的字符串;
-i或--ignore-case:比较栏位内容时,忽略大小写的差异;
-o<格式>:按照指定的格式来显示结果;
-t<字符>:使用栏位的分割字符;
-v<1或2>:更-a相同,但是只显示文件中没有相同栏位的行;
-1<栏位>:连接[文件1]指定的栏位;
-2<栏位>:连接[文件2]指定的栏位。
–help 显示帮助。
–version 显示版本信息

参数

  • 文件1:要进行合并操作的第1个文件参数;
  • 文件2:要进行合并操作的第2个文件参数。

实例

将两个文件的具有共同域的纪录连接在一起:

[root@locahost ~]# 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@locahost ~]# cat file_hobby.db
 A li:Song
 B wang:shopping
 C zhang:pingpong
 D liu:chess
 E Wang:reading
[root@locahost ~]# 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

-a1还显示第一个文件中没有共同域的纪录,-a2则显示第二个:

[root@locahost ~]# join -t: -a1 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
 E chen:23:women:Hefei
[root@locahost ~]# join -t: -a2 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
 E Wang:reading

设置指定格式的域来显示出来(将具有共同纪录的域按照姓名+性别+爱好的格式显示出来):

[root@locahost ~]# join -t: -o1.1 1.3 2.2 file.db file_hobby.db
 A li:men:Song
 B wang:women:shopping
 C zhang:men:pingpong
 D liu:women:chess