join
join
Linux join 命令用于将两个文件中,指定栏位内容相同的行连接起来。找出两个文件中,指定栏位内容相同的行,并加以合并,再输出到标准输出设备。
有点像数据库中的联表查询。首先就要确定哪个字段等于哪个字段
join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或2>][-1<栏位>][-2<栏位>][--help][--version][文件1][文件2]
-
-a<1或2>:除了显示原来的输出内容之外,还显示指令文件中没有相同栏位的行。 -
-v<1或2>:跟-a相同,但是只显示文件中没有相同栏位的行。 -
-i或--igore-case:比较栏位内容时,忽略大小写的差异。 -
-t<字符>:使用栏位的分隔字符。默认是tab,跟sort的-t,cut的-d用法相同 -
-1<栏位>:连接 [文件 1] 指定的栏位。 -
-2<栏位>:连接 [文件 2] 指定的栏位。
简单实践:
准备文件 jointest0.txt

jointest1.txt

join -t ':' -1 2 jointest0.txt -2 2 jointest1.txt 或者
join -t ':' -1 2 -2 2 jointest0.txt jointest1.txt,结果是:

结果列的顺序是:共同列 + 第一个文件除共同列以外的列 + 第二个文件除共同列以外的列
注意:共同列的数据顺序也要相同,比如文件一的共同列有三行,分别是:
| 共同列 |
|---|
| 1 |
| 2 |
| 3 |
文件二的共同列是:
| 共同列 |
|---|
| 3 |
| 2 |
| 1 |
此时,join 会提示你文件二需要排序,同时只显示一部分共同行。