鍍金池/ 教程/ Linux/ shell 學(xué)習(xí)十五天---join 連接字段
shell 學(xué)習(xí)四十五天---xargs
shell學(xué)習(xí)第三天
shell 學(xué)習(xí)十五天---join 連接字段
shell 學(xué)習(xí)第二天
shell 學(xué)習(xí)四十三天---臨時性文件的建立與使用
shell 學(xué)習(xí)第六天---小結(jié)
shell 學(xué)習(xí)三十三天---關(guān)于重定向
shell 學(xué)習(xí)二十九天---循環(huán)
shell 學(xué)習(xí)二十四天---提取開頭或結(jié)尾數(shù)行
shell 學(xué)習(xí)第十天---sed 查找與替換
shell 學(xué)習(xí)第十一天---sed 正則的精確控制
shell 學(xué)習(xí)三十天---break,continue,shift,getopts
shell 學(xué)習(xí)---小結(jié)
shell 學(xué)習(xí)三十一天---函數(shù)問題
shell 學(xué)習(xí)第四天---華麗的 printf 輸出
shell 學(xué)習(xí)三十五天---波浪號展開與通配符
shell 學(xué)習(xí)十九天---文本塊排序
shell 學(xué)習(xí)十二天---行與字符串
shell 學(xué)習(xí)二十一天---重新格式化段落
shell 學(xué)習(xí)十八天---文本排序
shell 學(xué)習(xí)十三天---sed 案例分析
shell 學(xué)習(xí)四十一天---列出文件 ls 和 od 命令
shell 學(xué)習(xí)十七天---awk 命令
shell 學(xué)習(xí)三十六天---命令替換
shell 學(xué)習(xí)十六天---join 練習(xí)
shell 學(xué)習(xí)三十二天---read 讀取一行
shell 學(xué)習(xí)二十二天---計算行數(shù),字?jǐn)?shù)以及字符數(shù)
shell 學(xué)習(xí)小總結(jié)---本章小結(jié)
shell 學(xué)習(xí)第八天---擴展正則表達(dá)式(ERE)
shell 學(xué)習(xí)四十二天---使用 touch 更新文件時間
shell 學(xué)習(xí)二十八天---case 語句
shell 學(xué)習(xí)三十九天---內(nèi)建命令
shell 學(xué)習(xí)第一天
shell 學(xué)習(xí)三十四天---printf 詳解
shell 學(xué)習(xí)二十六天---變量與算數(shù)
shell 學(xué)習(xí)三十八天---執(zhí)行順序和 eval
shell 學(xué)習(xí)四十四天---尋找文件
shell 學(xué)習(xí)二十五天---神器的管道符
shell 學(xué)習(xí)十四天---使用 cut 選定字段
shell 學(xué)習(xí)第五天---基本的I/O重定向
shell 學(xué)習(xí)四十天---awk 的驚人表現(xiàn)
shell 學(xué)習(xí)二十天---sort 的其他內(nèi)容以及 uniq 命令
shell 學(xué)習(xí)二十三天---打印
shell 學(xué)習(xí)第九天---分組
shell 學(xué)習(xí)四十八天---文件校驗和匹配
shell 學(xué)習(xí)二十七天---退出狀態(tài)和 if 語句
shell 學(xué)習(xí)四十七天---文件比較 cmp,diff,patch
shell 學(xué)習(xí)第七天---基礎(chǔ)正則表達(dá)式(BRE)
shell 學(xué)習(xí)四十六天---文件系統(tǒng)的空間信息 df 和 du 命令
shell 學(xué)習(xí)三十七天---引用
shell 學(xué)習(xí)小結(jié)

shell 學(xué)習(xí)十五天---join 連接字段

使用 join 連接字段
join 命令將多個文件結(jié)合起來,每個人建立的每條記錄,都共享一個鍵值,鍵值指的是記錄中的珠子段,通常會是用戶名稱,個人形式,員工編號之類的數(shù)據(jù).
語法:
join [options...] file1 file2
主要選項
-1 field1
-2 field2
標(biāo)明要結(jié)合的字段. -1 field 指的是從 file1 取出 field1,而-2field2 指的則為從 file2 取出 field2.字段編號自 1 開始,而非 0.
-o file.field
輸出 file 文件中的 field 字段.一般的字段則不打印.除非使用多個-o 選項,即可顯示多個輸出字段.
-t separator
使用 separator 作為輸入字段分割字符,而非使用空白.次字符也為輸出的字段分割字符.
行為模式
讀取 file1 與 file2,并根據(jù)共同鍵值結(jié)合多筆記錄.默認(rèn)以空白分隔字段.輸出結(jié)果則包括共同鍵值,來自 file1 的其余記錄,接著 file2 的其余記錄(指除了鍵值外的記錄).若 file1 位-,則 join 會讀取標(biāo)準(zhǔn)輸入,每個文件的第一個字段是用來結(jié)合的默認(rèn)鍵值;可以使用-1 與-2 更改鍵值.默認(rèn)情況下,在兩個文件中未含鍵值的行將不打印.
Linux join 命令用于將兩個文件中,指定欄位內(nèi)容相同的行連接起來。
找出兩個文件中,指定欄位內(nèi)容相同的行,并加以合并,再輸出到標(biāo)準(zhǔn)輸出設(shè)備。
例如:我有兩個文件:文件 aa 和文件 bb
aa 的內(nèi)容為:

joe 100  
jane 200  
herman 300  
chris 400

bb 的內(nèi)容為:

joe 20  
jane  10  
herman 30  
chris 98

每條記錄都有兩個字段:業(yè)務(wù)員的名字和銷售量.
為了讓 join 運行得到正確結(jié)果,輸入文件必須先完成排序.

編寫下列腳本:

 #!/bin/sh  
 #jointest.sh  
 #刪除注釋并排序數(shù)據(jù)文件  
 sed ‘/^#/d’ aa | sort > aa.sorted  
 sed ‘/^#/d’ bb | sort > bb.sorted  
 #以第一個鍵值做結(jié)合,將結(jié)果產(chǎn)生至標(biāo)準(zhǔn)輸出  
 join aa.sorted bb.sorted  
 #刪除緩存文件  
 rm aa.sorted bb.sorted  
 保存退出  
 chmod +x jointest.sh  
 ./jointest.sh  

輸出結(jié)果如下所示:

chris 400 98  
herman 300 30  
jane 200 10  
joe 100 20  

首先使用 sed 刪除注釋,然后再排序個別文件.排序后的緩存緩存文件稱為 join 命令的輸入數(shù)據(jù),最后刪除緩存文件.sed 的刪除還記得嗎?
sed ‘/^#/d’ bb
這里的意思是說把 bb 文件里以#開頭的行刪除