shell join兩個檔案

2021-06-23 06:04:14 字數 1817 閱讀 9488

資料庫操作中,可以使用join把兩個表連線起來,輸出結果。join命令可以應用到兩個檔案上,達到檔案join的目的。

例如檔案a為保險記錄,其中有訂單id,保單號,保險**

cat a

1 bx10 30

2 bx20 20

2 bx22 10

4 bx04 40

檔案b為訂單記錄 其中有 訂單id,訂單號,姓名

cat b

1 or10 zhangsan

2 or20 lisi

3 or30 wangwu

現在,想要知道訂單or20的保險號和保險金額。用join,so easy

join a b

1 bx10 30 or10 zhangsan

2 bx20 20 or20 lisi

2 bx22 10 or20 lisi

wangwu因為沒有買保險,結果中沒有展示。那麼如何展示除wangwu呢

join -v2  a b

3 or30 wangwu

如何找到有保單號,但是無法關聯到人的呢?

join -v1  a b

4 bx04 40

現在介紹一下join命令

用法:join [選項]... 檔案1 檔案2

-a filenum       filenum 為檔案編號,1表示檔案1,2表示檔案2。a為all的簡寫啦,因此a1就是輸出a的所有行啦。

-e empty          空資料用empty替代。

-i, --ignore-case  忽略大小寫

-j field                equivalent to '-1 field -2 field' 這個沒理解 

-o format         輸出格式例如"1.1,2.2,1.2,1.3"

-t char                字段分割符,預設是空格。

-v 檔案編號        類似於grep 中的v引數。加上v後,匹配上的資料就不輸出了。

-1 field          

-2 field           用檔案1中的field 和檔案2中的field比較。作為關聯兩個檔案的key。這裡的編號從1開始。

--check-order     檢查輸入行是否正確排序,即使所有輸入行均是成對的

--nocheck-order   不檢查輸入是否正確排序

看幾個高階的

格式化輸出

join -11 -21 -o'1.1,2.2,1.2,2.3' a b

1 or10 bx10 zhangsan

2 or20 bx20 lisi

2 or20 bx22 lisi

沒有關聯的資料也輸出

join -11 -21 -a1 -a2  -e"__" -o'1.1,2.2,1.2,2.3' a b

1 or10 bx10 zhangsan

2 or20 bx20 lisi

2 or20 bx22 lisi

__ or30 __ wangwu

4 __ bx04 __

其實-v引數相當強大。如果還記得用uniq求資料的交和差,那麼能用join實現嗎?

預設join不就是交集嗎

而-v後不就是差集了。。。。

我去,忘了件事。用於關聯的key需要排序。。。。

兩個檔案對比 C

public static bool filecompare string file1,string file2 int file1byte 0 int file2byte 0 using filestream fs1 new filestream file1,filemode.open fs2 n...

vim 比較兩個檔案

1.使用vim的比較模式開啟兩個檔案 vim d file1 file2 或vimdiff file1 file2 2.如果已經開啟了檔案file1,再開啟另乙個檔案file2進行比較 vert diffsplit file2 如果沒有用vert命令,diffsplit則會分上下兩個視窗。3.如果已...

vimdiff比較兩個檔案

實用的vim下比較兩個檔案命令 1 vimdiff file1 file2 終端下輸入該命令進入vim,垂直分隔視窗進行比較 2 vimdiff o file1 file2 水平分隔視窗進行比較 3 ctrl w j,k,h,l 上下左右切換游標所在的視窗 括號中表示可以是其中之一,按下ctrl w...