Linux-join

7.Shell

本章同步視頻:https://edu.51cto.com/sd/e4874

2.join - join lines of two files on a common field數據庫

        join命令用來將兩個文件中,制定欄位內容相同的行鏈接起來。找出兩個文件中,指定欄位內容相同的行,並加以合併,再輸出到標準輸出設備。ide

        注意:join在對兩個文件進行鏈接時,兩個文件必須都是按照鏈接域排好序的,按其餘域排序是無效的。spa

(1)語法orm

[dmtsai@study ~]$ join [-ti12] file1 file2視頻

選項與參數:排序

-t  :join 默認以空格符分隔數據,而且比對『第一個字段』的數據,字符串

若是兩個檔案相同,則將兩筆數據聯成一行,且第一個字段放在第一個!get

-i:忽略大小寫的差別;同步

-1  :這個是數字的 1 ,表明『第一個檔案要用那個字段來分析』的意思;it

-2  :表明『第二個檔案要用那個字段來分析』的意思。

(2)用法

[root@localhost tmp]# cat join1

adm x 3 4 adm

bin x 1 1 bin

daemon x 2 2 daemon

lp x 4 7 lp

root x 0 0 root

[root@localhost tmp]# cat join2

adm x 4

bin x 1

daemon x 2

root x 0

sys x 3

[root@localhost tmp]# join join1 join2     #內鏈接

adm x 3 4 adm x 4        

bin x 1 1 bin x 1

daemon x 2 2 daemon x 2

root x 0 0 root x 0

[root@localhost tmp]# join join2 join1

adm x 4  x 3 4 adm      #注意參數前後順序的結果

bin x 1  x 1 1 bin

daemon x 2  x 2 2 daemon

root x 0  x 0 0 root

#不指定任何參數的狀況下使用join命令,就至關於數據庫中的內鏈接,關鍵字不匹配的行不會輸出。

[root@localhost tmp]# join -a1 join1 join2    #左鏈接

adm x 3 4 adm x 4

bin x 1 1 bin x 1

daemon x 2 2 daemon x 2

lp x 4 7 lp

root x 0 0 root x 0

#顯示左邊文件中的全部記錄,右邊文件中沒有匹配的顯示空白。

[root@localhost tmp]# join -a2 join1 join2    #右鏈接

adm x 3 4 adm x 4

bin x 1 1 bin x 1

daemon x 2 2 daemon x 2

root x 0 0 root x 0

sys x 3

#顯示右邊文件中的全部記錄,左邊文件中沒有匹配的顯示空白。

[root@localhost tmp]# join -a1 -a2 join1 join2     #全鏈接

adm x 3 4 adm x 4

bin x 1 1 bin x 1

daemon x 2 2 daemon x 2

lp x 4 7 lp

root x 0 0 root x 0

sys x 3

[root@localhost tmp]# join join1 join2

adm x 3 4 adm x 4

bin x 1 1 bin x 1

daemon x 2 2 daemon x 2

root x 0 0 root x 0

[root@localhost tmp]# join -o 1.1 1.2 1.3 join1 join2

adm x 3       #只輸出指定字段

bin x 1

daemon x 2

root x 0

[root@localhost tmp]# join -o 1.1 1.2 1.3 2.2 2.3 join1 join2

adm x 3 x 4     #只輸出指定字段

bin x 1 x 1

daemon x 2 x 2

root x 0 x 0

(3)指定字段分隔符

[root@localhost tmp]# cat joina

adm:x:3:4:adm

bin:x:1:1:bin

daemon:x:2:2:daemon

lp:x:4:7:lp

root:x:0:0:root

[root@localhost tmp]# cat joinb

adm:x:4:

bin:x:1:

daemon:x:2:

root:x:0:

sys:x:3:

[root@localhost tmp]# join -t ":" joina joinb

adm:x:3:4:adm:x:4:

bin:x:1:1:bin:x:1:

daemon:x:2:2:daemon:x:2:

root:x:0:0:root:x:0:

(4)指定鏈接字段

[root@localhost tmp]# sort -t ":" -k 3 joina >join1

[root@localhost tmp]# sort -t ":" -k 3 joinb >join2

#須要先對鏈接字段排序

[root@localhost tmp]# cat join1

root:x:0:0:root    

bin:x:1:1:bin

daemon:x:2:2:daemon

adm:x:3:4:adm

lp:x:4:7:lp

[root@localhost tmp]# cat join2

root:x:0:

bin:x:1:

daemon:x:2:

sys:x:3:

adm:x:4:

[root@localhost tmp]# join -t ":" -j 3 join1 join2

0:root:x:0:root:root:x:       #指定同一字段鏈接

1:bin:x:1:bin:bin:x:

2:daemon:x:2:daemon:daemon:x:

3:adm:x:4:adm:sys:x:

4:lp:x:7:lp:adm:x:

[root@localhost tmp]# join -t ":" -1 4 -2 3 join1 join2

0:root:x:0:root:root:x:    #第一個文件的第4個字段

1:bin:x:1:bin:bin:x:        #與第二個文件的第3個字段鏈接

2:daemon:x:2:daemon:daemon:x:

4:adm:x:3:adm:adm:x:

(5)字符串佔位

[root@localhost tmp]# join -t ":" -o 1.1 1.2  2.2 2.3 -e "aa" -a1 join1 join2

adm:x:x:4

bin:x:x:1

daemon:x:x:2

lp:x:aa:aa

root:x:x:0

本章同步視頻:https://edu.51cto.com/sd/e4874

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息