使用 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 文件里以#開頭的行刪除