免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: 怿_mao44
打印 上一主题 下一主题

匹配不同文件中关键字该如何做呢? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-02-16 11:47 |只看该作者
  1. awk 'NR==FNR{f1[$3]=$0;next}$2 in f1{printf $0"\t"f1[$2] RS > "outfile1";delete f1[$2];next}{print > "outfile3"}END{for(s in f1)print f1[s] > "outfile2"}' file1 file2
复制代码

论坛徽章:
0
12 [报告]
发表于 2012-02-17 11:04 |只看该作者
  1. awk 'NR==FNR{a[$3]=$0}NR>FNR{b[$2]=$0}END{for(i in a) for(j in b) if(i==j) print a[i],b[j]}' file1 file2

  2. awk 'NR==FNR{a[$3]=$0}NR>FNR{b[$2]=$0}END{for(i in a){ flag=0;for(j in b) {if(i==j){flag=1}} if(!flag)print a[i]}}' file1 file2

  3. awk 'NR==FNR{a[$3]=$0}NR>FNR{b[$2]=$0}END{for(j in b){ flag=0;for(i in a) {if(i==j){flag=1}} if(!flag)print b[j]}}' file1 file2
复制代码

论坛徽章:
0
13 [报告]
发表于 2012-02-26 12:57 |只看该作者
回复 8# yinyuemi

这个办法适合在两个文件中仅有一列的内容存在匹配重叠,可如果超过两列的内容都可能存在匹配就会不太适用了。

输入文件一:
11        aa        bb        123        456
22        aa        cc        456        789
33        ee        bb        123        789
44        bb        aa        456        132

输入文件二:
+        1        aa        cc
+        2        ee        bb

如果这种情况,需要同时匹配两列里面的内容,譬如文件一的第二列必须匹配文件二的第三列,而同时文件一的第三列必须匹配文件二的第四列。
希望输出的结果文件是:
22        aa        cc        456        789        +        1        aa        cc
33        ee        bb        123        789        +        2        ee        bb

由于这两列中可能存在重复的记录,直接用之前的方法就不太合适了。但是之前的方法如果只是一列中有记录需要匹配,就非常便利的呢。。。


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP