每天一個 Linux 命令:join 命令
1. 命令簡介
將兩個文件按照指定的相同字段進行笛卡爾乘積橫向拼接,並輸出到標準輸出。默認情況下,join 字段分隔符是空格或 Tab。join 時,兩個文件需要按照某個字段排好序。
笛卡爾乘積指兩個集合 X 和 Y 成員相互組合構成的有序對的集合。比如集合 X={a,b},Y={0,1,2},則
X×Y={(a, 0), (a, 1), (a, 2), (b, 0), (b, 1), (b, 2)}
Y×X={(0, a), (0, b), (1, a), (1, b), (2, a), (2, b)}
2. 命令格式
join [OPTIONS] FILE1 FILE2
當 FILE1 或 FILE2 是連字符 -(二者不能同時是 -),那麼內容從標準輸入讀取。
3. 選項說明
-a FILENUM
除了顯示原來的輸出內容之外,還顯示文件中沒有相同欄位的行。FILENUM 取值爲 1 或 2,分別對應 FILE1 和 FILE2
-e EMPTY
若 FILE1 與 FILE2 中找不到指定的列,則在輸出中填入選項中的字符串
-i, --igore-case
比較列內容時,忽略大小寫
-j FIELD
等價於 -1 FIELD -2 FIELD
-o FORMAT
按照指定的格式顯示結果
-t CHAR
指定輸入和輸出列的分隔字符
-v FILENUM
作用類似於 -a FILENUM,但是隻顯示文件中沒有相同列的行
-1 FIELD
連接 FILE1 指定的列。FIELD 取 1 表示第一列,2 表示第二列,以此類推
-2 FIELD
連接 FILE2 指定的列。FIELD 取 1 表示第一列,2 表示第二列,以此類推
--check-order
默認選項,檢查文件是否已經排序
--nocheck-order
不檢查檢查文件是否已經排序
--help
顯示幫助信息並退出
--version
顯示版本信息並退出
4. 常用示例
(1)連接兩個文件,默認以第一列作爲連接字段。
# file1 內容如下
lvlv dablelv 25
zhangsan San 12
# file2 內容如下
lvlv english 15
lvlv math 75
zhangsan math 14
zhouxun english 45
join file1 file2
lvlv dablelv 25 english 15
lvlv dablelv 25 math 75
zhangsan San 12 math 14
(2)還是以上面的兩個文件爲例,顯示指明按照第一列中文名進行連接。
join -j 1 file1 file2
# 或
join -1 1 -2 1 file1 file2
(3)如果想顯示沒有相同字段的行,使用 -a1 或 -a2 指定顯示第一個或者第二個文件的行。
join -a2 file1 file2
lvlv dablelv 25 english 15
lvlv dablelv 25 math 75
zhangsan San 12 math 14
zhouxun english 45 //顯示了文件 file2 中未匹配的一行
參考文獻
[1] join(1) manual
轉自:戀貓大鯉魚
https://dablelv.blog.csdn.net/article/details/80237368
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/M8xUDotc08j0lJ4L1Sjwnw