join命令的用法
join命令的用法
j o i n用來將來自兩個分類文本文件的行連在一起。
下面講述j o i n工作方式。這里有兩個文件f i l e 1和f i l e 2,當(dāng)然已經(jīng)分類。每個文件里都有一些元素與另一個文件相關(guān)。由于這種關(guān)系, j o i n將兩個文件連在一起,這有點像修改一個主文件,使之包含兩個文件里的共同元素。
文本文件中的域通常由空格或t a b鍵分隔,但如果愿意,可以指定其他的域分隔符。一些系統(tǒng)要求使用j o i n時文件域要少于2 0,為公平起見,如果域大于2 0,應(yīng)使用D B M S系統(tǒng)。
為有效使用j o i n,需分別將輸入文件分類。
其一般格式為:
[Copy to clipboard] [ - ]
CODE:
join [options] input-file1 input-file2
QUOTE:
選項:
an n 為一數(shù)字,用于連接時從文件n中顯示不匹配行。例如, - a 1顯示第一個文件的不匹配行,- a 2為從第二個文件中顯示不匹配行。
o n.m n為文件號,m為域號。1 . 3表示只顯示文件1第三域,每個n,m必須用逗號分隔,如1 . 3,2 . 1。
j n m n為文件號,m為域號。使用其他域做連接域。
t 域分隔符。用來設(shè)置非空格或t a b鍵的域分隔符。例如,指定冒號做域分隔符- t:。
現(xiàn)有兩個文本文件,其中一個包含名字和街道地址,稱為n a m e . t x t,另一個是名字和城鎮(zhèn),
為t o w n . t x t。
[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat names.txt
M.Golls 12 Hidd Rd
P.Heller The Acre
P.Willey 132 The Grove
T.Norms 84 Connaught Rd
K.Fletch 12 Woodlea
[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat town.txt
M.Golls Norwich NRD
P.Willey Galashiels GDD
T.Norms Brandon BSL
K.Fletch Mildenhall MAF
K.Firt Mitryl Mdt
連接兩個文件
連接兩個文件,使得名字支持詳細地址。例如M . G o l l s記錄指出地址為12 Hidd Rd。連接域為域0—名字域。因為兩個文件此域相同, j o i n將假定這是連接域:
[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
缺省j o i n刪除或去除連接鍵的第二次重復(fù)出現(xiàn),這里即為名字域。
1. 不匹配連接
如果一個文件與另一個文件沒有匹配域時怎么辦?這時j o i n不可以沒有參數(shù)選項,經(jīng)常指定兩個文件的- a選項。下面的例子顯示匹配及不匹配域。
[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join -a1 -a2 names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
K.Firt Mitryl Mdt
[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join -a1??names.txt town.txt
M.Golls 12 Hidd Rd Norwich NRD
P.Heller The Acre
P.Willey 132 The Grove Galashiels GDD
T.Norms 84 Connaught Rd Brandon BSL
K.Fletch 12 Woodlea Mildenhall MAF
2. 選擇性連接
使用- o選項選擇連接域。例如要創(chuàng)建一個文件僅包含人名及城鎮(zhèn), j o i n執(zhí)行時需要指定顯示域。方式如下:
使用1 . 1顯示第一個文件第一個域,2 . 2顯示第二個文件第二個域,其間用逗號分隔。命令為:
[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join -o 1.1,2.2 names.txt town.txt
M.Golls Norwich
P.Willey Galashiels
T.Norms Brandon
K.Fletch Mildenhall
使用-jn m進行其他域連接,例如用文件1域3和文件域2做連接鍵,命令為:
[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat pers
P.Jones Office Runner ID897
S.Round UNIX admin ID666
L.Clip Personl Chief ID982
[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ cat pers2
Dept2C ID897 6 years
Dept3S ID666 2 years
Dept5Z ID982 1 year
文件p e r s包括名字、工作性質(zhì)和個人I D號。文件p e r s 2包括部門、個人I D號及工齡。連接應(yīng)使用文件p e r s中域4,匹配文件p e r s 2中域2,命令及結(jié)果如下:
[Copy to clipboard] [ - ]
CODE:
[sam@chenwy sam]$ join -j1 4 -j2 2 pers pers2
ID897 P.Jones Office Runner Dept2C 6 years
ID666 S.Round UNIX admin Dept3S 2 years
ID982 L.Clip Personl Chief Dept5Z 1 year
使用j o i n應(yīng)注意連接域到底是哪一個,比如說你認為正在訪問域4,但實際上j o i n應(yīng)該訪問域5,這樣將不返回任何結(jié)果。如果是這樣,用a w k檢查域號。例如,鍵入$ awk '{print $4}'文件名,觀察其是否匹配假想域。
?
?
轉(zhuǎn)載于:https://blog.51cto.com/5imple/845929
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
- 上一篇: 飞书如何退出团队(汉典飞字的基本解释)
- 下一篇: 数据结构分析之——图