1. 程式人生 > >Linux shell join命令詳解

Linux shell join命令詳解

Linux join命令

2012-02-09 17:49:00| 分類: SHELL | 標籤:linux join 檔案連線 |字號 訂閱 join命令 功能:“將兩個檔案裡指定欄位同樣的行連線起來”,即依照兩個檔案裡共有的某一列,將相應的行拼接成一行。 join [options] file1 file2 注:這兩個檔案必須在已經在此列上是依照同樣的規則進行了排序。 join選項 -a FILENUM:除了顯示匹配好的行另外將指定序號(1或2)檔案裡部匹配的行顯示出來 -e EMPTY:將須要顯示可是檔案裡不存在的域用此選項指定的字元取代 -i :忽略大寫和小寫-j FIELD :等同於 -1 FIELD -2 FIELD,-j指定一個域作為匹配欄位

-o FORMAT:以指定格式輸出 -t CHAR :以指定字元作為輸入輸出的分隔符 join 預設以空白字元做分隔符(空格和\t),能夠使用 join -t $'\t'來指定使用tab做分隔符 -v FILENUM:與-a相似 但值顯示檔案裡沒匹配上的行 -1 FIELD:以file1中FIELD欄位進行匹配 -2 FIELD:以file2中FIELD欄位進行匹配 --help :列印命令幫助檔案 樣例: 檔案 file1.txt aa 1 2 bb 2 3 cc 4 6 dd 3 3 檔案file2.txt aa 2 1 bb 8 2 ff 2 4 cc 4 4 dd 5 5

1.join file1.txt file2.txt 輸出:aa 1 2 2 1 bb 2 3 8 2 預設已兩個檔案的第一行做匹配欄位,預設以空格(不限個數)做分隔符。 2.join -j 1 file1.txt file2.txt 輸出:aa 1 2 2 1 bb 2 3 8 9 -j選項 指定了以兩個檔案裡第一列做匹配欄位 等同於join file1.txt file2.txt

3. join -1 2 -2 3 file1.txt file2.txt 輸出: 1 aa 2 aa 2 2 bb 3 bb 8 4 cc 6 ff 2  4 cc 6 cc 4 以第一個檔案的第二列和第二個檔案的第三列做匹配欄位。因為第二個檔案裡第三列的兩個3 都與第一個檔案裡第三行因此輸出 4 cc 6 ff 2  4 cc 6 cc 4

還有一種解決策略

將想要join的列通過awk都放在第一列,如果只想要檔案中的某些列,那也用awk取出來,

然後直接用sort排序,預設就是按照第一列排序的

然後直接join,這樣sort join都很方便,使用預設的option就可以

4 join -o 1.1 -o 1.2 -o 1.3 -o 2.1 -o 2.2 -o 2.3 -e 'empty' -a 1 file1.txt file2.txt  輸出: aa 1 2 aa 2 1 bb 2 3 bb 8 2 cc 4 6 empty empty empty dd 3 3 empty empty empty -o 指定 將file1的1,2,3列,file2的1,2,3 列都輸出。-a指定將file1中不匹配的行也輸出,可是file2中沒有與file1後兩行相應的欄位,因此使用empty補齊。

5.join -v 1 file1.txt file2.txt  輸出:

cc 4 6 dd 3 3 -v 1 將file1中不匹配的行輸出

PS:join命令和資料庫中的join命令很相似。 儘管file1和file2都已經排序,可是因為在第三行時開始不匹配因此僅僅匹配上了前兩行,後面的行儘管欄位也能夠相應可是以不能匹配。join命令,對檔案格式的要求很強,假設想要更靈活的使用,可用AWK命令,參加AWK例項

join命令要求對匹配的列必須按相同的規則排過序

6. join 標準輸入 有時我們須要將多個格式同樣的檔案join到一起,而join接受的是兩個檔案的指令,此時我們能夠使用管道和字元“-"來實現 join file1 file2 | join - file3 | join - file4  這樣就能夠將四個檔案 連線到 一起了。