Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux join命令

Linux join命令的使用及说明

作者:fengyehongWorld

`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`join`命令支持多种参数,如指定连接键、字段分隔符、输出格式、空字段填充值、忽略大小写、输出未匹配行等

一. 基本语法

join 是 Linux 中用于按字段将两个文件进行连接的命令,功能类似 SQL 的 JOIN。

参数说明
-1 N指定 file1 用第 N 字段作为连接键
-2 N指定 file2 用第 N 字段作为连接键
-t CHAR设置字段分隔符(如 -t , 表示用逗号)
-o FORMAT指定输出字段的格式,例如:-o 0 1.2 2.3
-a 1输出 file1 中所有行(即使没有匹配),相当于 LEFT OUTER JOIN
-a 2输出 file2 中所有行(即使没有匹配),相当于 RIGHT OUTER JOIN
-a 1 -a 2输出所有行(匹配和未匹配),相当于 FULL OUTER JOIN
-e STRING指定空字段填充值,用于 -a 显示未匹配时
-i忽略大小写(等价于 --ignore-case)
-v 1仅显示 file1 中未匹配的行
-v 2仅显示 file2 中未匹配的行

二. 数据准备

apluser@FengYeHong-HP:0725$ cat students1.txt
101 Alice
102 Bob
103 Carol
apluser@FengYeHong-HP:0725$ cat scores1.txt
101 80
102 90
104 95
apluser@FengYeHong-HP:0725$ cat students2.txt
101,Alice
102,Bob
103,Carol
apluser@FengYeHong-HP:0725$ cat scores2.txt
Alice,80
Bob,90
fengyehong,95

三. 指定文件的连接key

‘默认情况下使用文件的第1列进行join

apluser@FengYeHong-HP:0725$ join students1.txt scores1.txt
101 Alice 80
102 Bob 90
apluser@FengYeHong-HP:0725$ join -1 1 -2 1 students1.txt scores1.txt
101 Alice 80
102 Bob 90
apluser@FengYeHong-HP:0725$ join -t, -1 2 -2 1 students2.txt scores2.txt
Alice,101,80
Bob,102,90

四.-a输出指定文件的所有行

apluser@FengYeHong-HP:0725$ join -a 1 students1.txt scores1.txt
101 Alice 80
102 Bob 90
103 Carol
apluser@FengYeHong-HP:0725$ join -a 2 students1.txt scores1.txt
101 Alice 80
102 Bob 90
104 95
apluser@FengYeHong-HP:0725$ join -a 1 -a 2 students1.txt scores1.txt
101 Alice 80
102 Bob 90
103 Carol
104 95

五.-o指定输出的字段

apluser@FengYeHong-HP:0725$ cat address1.txt
101 地球 火星
102 水星 金星
104 木星 土星
apluser@FengYeHong-HP:0725$ join students1.txt address1.txt
101 Alice 地球 火星
102 Bob 水星 金星

apluser@FengYeHong-HP:0725$ join -o 1.2 2.2 2.3 students1.txt address1.txt
Alice 地球 火星
Bob 水星 金星
apluser@FengYeHong-HP:0725$ join -o 1.2,2.2,2.3 students1.txt address1.txt
Alice 地球 火星
Bob 水星 金星

六.-v指定输出未匹配的行

apluser@FengYeHong-HP:0725$ join -v 1 students1.txt address1.txt
103 Carol
apluser@FengYeHong-HP:0725$ join -v 2 students1.txt address1.txt
104 木星 土星
apluser@FengYeHong-HP:0725$ join -v 1 -v 2 students1.txt address1.txt
103 Carol
104 木星 土星

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文