Linux的join命令

Join是將文件連接起來的一個命令


Join - join lines of two files on a common field

語法結構

join [-i][-a<1或2>][-e<字符串>][-o<格式>][-t<字符>][-v<1或2>][-1<欄位>][-2<欄位>][--help][--version][文件1][文件2]
  • join的參數列表
    • -a<1或2> 除了顯示原來的輸出內容之外,還顯示指令文件中沒有相同欄位的行。
    • -e string 用string代替不存在的域
    • -i 忽視大小寫
    • -o 按照指定的格式來顯示結果。
    • -t 字符串分割
    • -j FIELD :等同於 -1 FIELD -2 FIELD,-j指定一個域作爲匹配字段
    • -v<1或2> 跟-a相同,但是隻顯示文件中沒有相同欄位的行。
    • -1 連接[文件1]指定的欄位
    • -2 連接[文件2]指定的欄位

代碼實現

實例

  1. join的使用方式
20151008  cat b
a s
b e
c b
d wq
☁  20151008  cat low_up
a 61
b 25
c 15
d 3220151008  join b low_up
a s 61
b e 25
c b 15
d wq 3220151008  join low_up b
a 61 s
b 25 e
c 15 b
d 32 wq

join後面跟是文件是有順序關係,並且只有相同的line才能join在一起

2 -a和-v的區別
- a是顯示所有數據並且顯示沒有相同的line。
- v只顯示文件中沒有相同欄位的行。

##我們在文件加不相同的列,並且file1和file2的必須是一一對應的,如果不對應需要先排序20151008  cat low_up
a 61
b 25
c 15
d 32
e 420151008  cat b
a s
b e
c b
d wq
☁  20151008  join -a1 low_up b
a 61 s
b 25 e
c 15 b
d 32 wq
e 420151008  join -a2 low_up b
a 61 s
b 25 e
c 15 b
d 32 wq
☁  20151008  join -v1 low_up b
e 420151008  join -v2 low_up b

這邊稍微修改文件的位置,那麼結果將完全不同

20151008  join -a1 low_up b
e 4
a 61
b 25
c 15
d 3220151008  join -a2 low_up b
a s
b e
c b
d wq
☁  20151008  join -v1 low_up b
e 4
a 61
b 25
c 15
d 3220151008  join -v2 low_up b
a s
b e
c b
d wq

所以如果想要對文件進行join處理的話,需要提前對他進行排序,不然可能會跟預期的結果不一樣
3. -o,-j和-t連用
- -o 按照指定的格式來顯示結果。
- -t 字符串分割
- -j FIELD :等同於 -1 FIELD -2 FIELD,-j指定一個域作爲匹配字段

20151008  cat low_up
a,61
b,25
c,15
d,3220151008  cat b
a,s
b,e
c,b
d,wq
☁  20151008  join -a1 -j1 -t, -o 1.1,1.2 low_up b
a,61
b,25
c,15
d,3220151008  join -a1 -j1 -t, -o 1.1 low_up b
a
b
c
d
☁  20151008  join -a1 -j1 -t, -o 1.2 low_up b
61
25
15
3220151008  join -a2 -j1 -t, -o 1.1 low_up b
a
b
c
d
☁  20151008  join -a2 -j2 -t, -o 1.1 low_up b




☁  20151008  join -a2 -j1 -t, -o 1.1 low_up b
a
b
c
d

結論

總體來說你需要用什麼命令那麼需要看具體的業務需求,有需要去重的操作,有需要合併的操作都可以,個人也挺喜歡paste這個命令和sed,cut等命令結合處理起來處理文件的感覺也是棒棒噠.
順帶吐槽一下,MD感覺用起來有bug啊,不知道是不是我不會用的緣故。

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