Linux join命令的使用及說(shuō)明
更新時(shí)間:2025年11月11日 15:16:39 作者:fengyehongWorld
`join`命令用于在Linux中按字段將兩個(gè)文件進(jìn)行連接,類似于SQL的JOIN,它需要兩個(gè)文件按用于匹配的字段排序,并且第一個(gè)文件的換行符必須是LF,`join`命令支持多種參數(shù),如指定連接鍵、字段分隔符、輸出格式、空字段填充值、忽略大小寫、輸出未匹配行等
一. 基本語(yǔ)法
join 是 Linux 中用于按字段將兩個(gè)文件進(jìn)行連接的命令,功能類似 SQL 的 JOIN。
- 要求兩個(gè)文件按 用于匹配的字段排序好,一定要排序,否則無(wú)法正確join
- 要求用于join的第一個(gè)文件的換行符是LF,一定不能是CRLF,否則無(wú)法正確匹配
| 參數(shù) | 說(shuō)明 |
|---|---|
| -1 N | 指定 file1 用第 N 字段作為連接鍵 |
| -2 N | 指定 file2 用第 N 字段作為連接鍵 |
| -t CHAR | 設(shè)置字段分隔符(如 -t , 表示用逗號(hào)) |
| -o FORMAT | 指定輸出字段的格式,例如:-o 0 1.2 2.3 |
| -a 1 | 輸出 file1 中所有行(即使沒(méi)有匹配),相當(dāng)于 LEFT OUTER JOIN |
| -a 2 | 輸出 file2 中所有行(即使沒(méi)有匹配),相當(dāng)于 RIGHT OUTER JOIN |
| -a 1 -a 2 | 輸出所有行(匹配和未匹配),相當(dāng)于 FULL OUTER JOIN |
| -e STRING | 指定空字段填充值,用于 -a 顯示未匹配時(shí) |
| -i | 忽略大小寫(等價(jià)于 --ignore-case) |
| -v 1 | 僅顯示 file1 中未匹配的行 |
| -v 2 | 僅顯示 file2 中未匹配的行 |
二. 數(shù)據(jù)準(zhǔn)備
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
‘默認(rèn)情況下使用文件的第1列進(jìn)行join
apluser@FengYeHong-HP:0725$ join students1.txt scores1.txt 101 Alice 80 102 Bob 90
1 1 -2 1:指定第1個(gè)文件的第1列和第2個(gè)文件的第1列作為join的key-t, -1 2 -2 1:-t,:默認(rèn)情況下使用空格作為列之間的分隔符,通過(guò)-t手動(dòng)指定分隔符為逗號(hào)-1 2 -2 1:指定第1個(gè)文件的第2列和第2個(gè)文件的第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個(gè)文件的所有行,相當(dāng)于左連接-a 2:輸出第2個(gè)文件的所有行,相當(dāng)于右連接
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個(gè)文件的第2個(gè)字段
- 輸出第2個(gè)文件的第2個(gè)和第3個(gè)字段
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個(gè)和第2個(gè)文件中未匹配的內(nèi)容
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個(gè)和第2個(gè)文件中未匹配的內(nèi)容
apluser@FengYeHong-HP:0725$ join -v 1 -v 2 students1.txt address1.txt 103 Carol 104 木星 土星
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux環(huán)境下Apache開啟https服務(wù)的方法詳解
這篇文章主要介紹了Linux環(huán)境下Apache開啟https服務(wù)的方法,結(jié)合實(shí)例形式分析了阿里云環(huán)境下獲取SSL證書及Apache服務(wù)器安裝、開啟SSL的相關(guān)操作技巧,需要的朋友可以參考下2019-07-07
Linux INotif機(jī)制詳解及實(shí)例代碼
這篇文章主要介紹了Linux INotif機(jī)制詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-01-01
Ubuntu服務(wù)器下搭建php運(yùn)行環(huán)境的方法
這篇文章主要介紹了Ubuntu服務(wù)器下搭建php運(yùn)行環(huán)境的方法,簡(jiǎn)單分析了Ubuntu操作系統(tǒng)環(huán)境下搭建Apache、php及mysql模塊相關(guān)步驟、命令與操作技巧,需要的朋友可以參考下2018-04-04
Ubuntu bash:沒(méi)有那個(gè)文件或目錄問(wèn)題及解決
在安裝交叉編譯環(huán)境時(shí),遇到提示沒(méi)有某個(gè)文件或目錄的問(wèn)題,盡管環(huán)境變量設(shè)置正確,后發(fā)現(xiàn)是由于缺少32位運(yùn)行庫(kù)lib32z1導(dǎo)致的,通過(guò)安裝lib32z1,問(wèn)題得到解決2026-01-01

