Linux join命令的使用及說明
更新時間:2025年11月11日 15:16:39 作者:fengyehongWorld
`join`命令用于在Linux中按字段將兩個文件進行連接,類似于SQL的JOIN,它需要兩個文件按用于匹配的字段排序,并且第一個文件的換行符必須是LF,`join`命令支持多種參數(shù),如指定連接鍵、字段分隔符、輸出格式、空字段填充值、忽略大小寫、輸出未匹配行等
一. 基本語法
join 是 Linux 中用于按字段將兩個文件進行連接的命令,功能類似 SQL 的 JOIN。
- 要求兩個文件按 用于匹配的字段排序好,一定要排序,否則無法正確join
- 要求用于join的第一個文件的換行符是LF,一定不能是CRLF,否則無法正確匹配
| 參數(shù) | 說明 |
|---|---|
| -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 中未匹配的行 |
二. 數(shù)據(jù)準備
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
1 1 -2 1:指定第1個文件的第1列和第2個文件的第1列作為join的key-t, -1 2 -2 1:-t,:默認情況下使用空格作為列之間的分隔符,通過-t手動指定分隔符為逗號-1 2 -2 1:指定第1個文件的第2列和第2個文件的第1列作為join的key
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輸出指定文件的所有行
-a 1:輸出第1個文件的所有行,相當于左連接-a 2:輸出第2個文件的所有行,相當于右連接
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
-a 1 -a 2:輸出所有行
apluser@FengYeHong-HP:0725$ join -a 1 -a 2 students1.txt scores1.txt 101 Alice 80 102 Bob 90 103 Carol 104 95
五.-o指定輸出的字段
-o 1.2 2.2 2.3:- 輸出第1個文件的第2個字段
- 輸出第2個文件的第2個和第3個字段
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指定輸出未匹配的行
- 輸出第1個和第2個文件中未匹配的內容
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 木星 土星
- 輸出第1個和第2個文件中未匹配的內容
apluser@FengYeHong-HP:0725$ join -v 1 -v 2 students1.txt address1.txt 103 Carol 104 木星 土星
總結
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Linux環(huán)境下Apache開啟https服務的方法詳解
這篇文章主要介紹了Linux環(huán)境下Apache開啟https服務的方法,結合實例形式分析了阿里云環(huán)境下獲取SSL證書及Apache服務器安裝、開啟SSL的相關操作技巧,需要的朋友可以參考下2019-07-07

