join 命令將多個(gè)文件結(jié)合起來(lái),每個(gè)人建立的每條記錄,都共享一個(gè)鍵值,鍵值指的是記錄中的珠子段,通常會(huì)是用戶名稱,個(gè)人形式,員工編號(hào)之類的數(shù)據(jù)。
語(yǔ)法:
join [options...] file1 file2
主要選項(xiàng)
讀取 file1 與 file2,并根據(jù)共同鍵值結(jié)合多筆記錄。默認(rèn)以空白分隔字段。輸出結(jié)果則包括共同鍵值,來(lái)自 file1 的其余記錄,接著 file2 的其余記錄 (指除了鍵值外的記錄)。若 file1 位 -,則 join 會(huì)讀取標(biāo)準(zhǔn)輸入,每個(gè)文件的第一個(gè)字段是用來(lái)結(jié)合的默認(rèn)鍵值; 可以使用 -1 與 -2 更改鍵值。默認(rèn)情況下,在兩個(gè)文件中未含鍵值的行將不打印。
Linux join 命令用于將兩個(gè)文件中,指定欄位內(nèi)容相同的行連接起來(lái)。
找出兩個(gè)文件中,指定欄位內(nèi)容相同的行,并加以合并,再輸出到標(biāo)準(zhǔn)輸出設(shè)備。
例如:
我有兩個(gè)文件: 文件 aa 和文件 bb
aa 的內(nèi)容為:
joe 100
jane 200
herman 300
chris 400
bb 的內(nèi)容為:
joe 20
jane 10
herman 30
chris 98
每條記錄都有兩個(gè)字段:業(yè)務(wù)員的名字和銷售量。為了讓 join 運(yùn)行得到正確結(jié)果,輸入文件必須先完成排序.
編寫下列腳本:
\#!/bin/sh
\#jointest.sh
\#刪除注釋并排序數(shù)據(jù)文件
sed ‘/^#/d’ aa | sort > aa.sorted
sed ‘/^#/d’ bb | sort > bb.sorted
\#以第一個(gè)鍵值做結(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 刪除注釋,然后再排序個(gè)別文件。排序后的緩存緩存文件稱為 join 命令的輸入數(shù)據(jù),最后刪除緩存文件.sed 的刪除還記得嗎?
sed '/^#/d' bb
這里的意思是說(shuō)把 bb 文件里以#開(kāi)頭的行刪除