在介绍命令之前,首先注意一点:
join命令要求两个文件,必须是已经排序的文件,排序详情请了解sort 命令
在linux 下join 命令 可以根据格式化文本中的一个字段,把两个文本合并。
举例
文件A.txt
0 a
1 b
文件B.txt
0 c
1 d
2 e
我们希望以第一列为key 把两个文件合并成C.txt
0 a c
1 b d
这就是join命令要干的事,在应用中第一列经常是数据库中的主键,你希望根据主键把一个实体的各种信息合并成一个文件,同时由于数据库数据量巨大(几千万甚至过亿记录,否则应该直接读取数据库处理),不可能通过sql直接完成。
下面进入正题:
场景一: 你需要把两个文件按第一个字段合并,没有任何别的要求
join A.txt B.txt
默认情况下,join会把结果输出到标准输出(屏幕),如果你想把它存入文件就重定向吧
join A.txt B.txt >C.txt
合并结果如下:
0 a c
1 b d
B.txt中的第3行丢了,对就是这样的,默认情况下如果这个字段没有找到匹配项就会被丢弃。场景二:你希望合并两个文件,把不存在的字段用0补齐
join -o 2.1 -o 1.2 -o 2.2 -e 0 -a 2 A.txt B.txt
合并结果:
0 a c
1 b d
2 0 e
解释:
-o ,规定输出字段,-o 2.1 代表第2个文件第一个字段,依次出现的-o 规定了,输出中的各字段及出现的顺序。
-a ,打印找不到匹配的行,-a2 代表打印第2个文件中找不到匹配的行,比如上面B.txt中的第3行
-e ,缺失字段替代符,如上A.txt中找不到字段为2的记录,用0进行补齐
其它选项:
-j :比较字段,默认用第1个字段 进行比较合并,可以用如 -j 2指定用第2个字段进行比较,同样的功能也可以如下实现
-1 2 -2 2 ,代表第一个文件第2个字段,第2个文件第2个字段,当然你也可以用第一个文件的第1个字段和第2个文件的第2个字段(-1 1 -2 2)比较,你懂的。。。
-i:不区分大小写
-t: 指定分隔符,