[shell]join两个文件

来源:互联网 发布:arksz410788k数据手册 编辑:程序博客网 时间:2024/05/16 06:28

数据库操作中,可以使用join把两个表连接起来,输出结果。join命令可以应用到两个文件上,达到文件join的目的。

例如文件A为保险记录,其中有订单id,保单号,保险价格

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. cat A  
  2. 1 bx10 30  
  3. 2 bx20 20  
  4. 2 bx22 10  
  5. 4 bx04 40  

文件B为订单记录 其中有 订单id,订单号,姓名

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. cat B  
  2. 1 or10 zhangsan  
  3. 2 or20 lisi  
  4. 3 or30 wangwu  

现在,想要知道订单or20的保险号和保险金额。用join,so easy

[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. join A B  
  2. 1 bx10 30 or10 zhangsan  
  3. 2 bx20 20 or20 lisi  
  4. 2 bx22 10 or20 lisi  
wangwu因为没有买保险,结果中没有展示。那么如何展示除wangwu呢
[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. join -v2  A B  
  2. 3 or30 wangwu  

如何找到有保单号,但是无法关联到人的呢?
[html] view plaincopy在CODE上查看代码片派生到我的代码片
  1. join -v1  A B  
  2. 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   不检查输入是否正确排序
0 0