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
 以第一個文件的第二列和第二個文件的第三列做匹配字段。由於第二個文件中第三列的兩個4 都與第一個文件中第三行因此輸出
    4 cc 6 ff 2 
    4 cc 6 cc 4
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實例

6. join 標準輸入
  有時我們需要將多個格式相同的文件join到一起,而join接受的是兩個文件的指令,此時我們可以使用管道和字符“-"來實現
    join file1 file2 | join - file3 | join - file4  
  這樣就可以將四個文件 連接到 一起了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章