資料庫操作中,可以使用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
wangwu因為沒有買保險,結果中沒有展示。那麼如何展示除wangwu呢join a b
1 bx10 30 or10 zhangsan
2 bx20 20 or20 lisi
2 bx22 10 or20 lisi
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
沒有關聯的資料也輸出
其實-v引數相當強大。如果還記得用uniq求資料的交和差,那麼能用join實現嗎?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 __
預設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...