免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 3876 | 回复: 12
打印 上一主题 下一主题

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

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-02-15 19:47 |只看该作者 |倒序浏览
本帖最后由 怿_mao44 于 2012-02-15 22:06 编辑

不好意思,能请教一个问题么?

     按照某一列的内容,合并相同内容的两个文件中的行,均已制表符进行划分的

    如文件1:(此文件中第三列为关键字)           
Qwe        wer        aa        rty
Giy        rug        cc        uop
Rtu        egj        ee        ioj
Drt        tue        ff        yti
                                 
文件2::(而此文件中第二列为关键字)
123        aa        wyf        yui
234        bb        yoi        dty
456        dd        uoj        yio
567        ee        drt        hio


分别得到三个结果:
    结果文件一:  在两个文件中有匹配的记录
Qwe        wer        aa        rty        123        aa        wyf        yui
Rtu        egi        ee        ioj        567        ee        drt        hio

     结果文件二:   只在输入文件一中存在的记录
Giy        rug        cc        uop
Drt        tue        ff        yti

      结果文件三:   只在输入文件二中存在的记录
234        bb        yoi        dty
456        dd        uoj        yio

论坛徽章:
0
2 [报告]
发表于 2012-02-15 19:50 |只看该作者
本帖最后由 怿_mao44 于 2012-02-15 20:11 编辑

     awk?  还是grep?  

在文件超过万行的时候,哪种更灵活方便呢?
      
     

论坛徽章:
0
3 [报告]
发表于 2012-02-15 20:47 |只看该作者
你的文件1和文件2怎么复制下来是个整个的。。。佩服你的编辑能力啊

论坛徽章:
0
4 [报告]
发表于 2012-02-15 21:34 |只看该作者
回复 3# yangkyo821



。。。我知道错了。。已经改了。。


   

论坛徽章:
1
辰龙
日期:2014-05-22 11:38:58
5 [报告]
发表于 2012-02-15 21:49 |只看该作者
  1. [winway@winway test]$ awk 'NR==FNR{a[$3]=$0}NR>FNR{if($2 in a){b[FNR]=a[$2]"\t"$0;delete a[$2]}else{c[FNR]=$0}}END{print "file1:";for(i in b)print b[i];print "file2:";for(i in a)print a[i];print "file3";for(i in c)print c[i]}' file1 file2   
  2. file1:
  3. rtu  egj  ee  ioj       567  ee  drt  hio
  4. qwe  wer  aa  rty       123  aa  wyf  yui
  5. file2:
  6. giy  rug  cc  uop
  7. drt  tue  ff  yti
  8. file3
  9. 234  bb  yoi  dty
  10. 456  dd  uoj  yio
复制代码

论坛徽章:
0
6 [报告]
发表于 2012-02-15 22:01 |只看该作者
  如文件1:(此文件中第三行为关键字)           
文件2::(而此文件中第二行为关键字)


行列没分清楚

论坛徽章:
0
7 [报告]
发表于 2012-02-15 22:18 |只看该作者
回复 6# ywlscpl


    以列为关键字

  只是因为涉及的文件中行数可能会上万行,还希望能得到比较准确快捷的方法求得希望的结果

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
8 [报告]
发表于 2012-02-16 00:21 |只看该作者
回复 1# 怿_mao44


    try:
  1. join -1 3 -2 2 file1 file2 # comm
  2. grep -vf <(cut -f3 file1) file2 # file2 only
  3. grep -vf <(cut -f2 file2) file1 # file1 only
复制代码

论坛徽章:
0
9 [报告]
发表于 2012-02-16 09:51 |只看该作者
awk 'NR==FNR{a[$3]=$0;ind[$3]};NR>FNR{b[$2]=$0;ind[$2]}END{for(i in ind){if(a[i]&&b[i]){print a[i],b[i]}}}' file1 file2

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

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

论坛徽章:
0
10 [报告]
发表于 2012-02-16 11:30 |只看该作者
本帖最后由 cooluncle 于 2012-02-16 11:43 编辑
  1. [destiny@mail ~]$ cat file1
  2. [destiny@mail ~]$ cat file1
  3. Qwe     wer     aa      rty
  4. Giy     rug     cc      uop
  5. Rtu     egj     ee      ioj
  6. Drt     tue     ff      yti
  7. [destiny@mail ~]$ cat file2
  8. 123     aa      wyf     yui
  9. 234     bb      yoi     dty
  10. 456     dd      uoj     yio
  11. 567     ee      drt     hio
  12. [destiny@mail ~]$ awk -F'\t' -v OFS='\t' 'NR==FNR{a[$3]=$0} NR>FNR{if($2 in a){b[$2]=$2;$1=sprintf(a[$2]"\t"$1);print}else print $0 >> "/tmp/file2_only"}END{for(x in a ){if(!(x in b)){print a[x] >> "/tmp/file1_only"}}}' file1 file2 > /tmp/file1_and_file2
  13. [destiny@mail ~]$ cat /tmp/file1_only
  14. Giy     rug     cc      uop
  15. Drt     tue     ff      yti
  16. [destiny@mail ~]$ cat /tmp/file2_only
  17. 234     bb      yoi     dty
  18. 456     dd      uoj     yio
  19. [destiny@mail ~]$ cat /tmp/file1_and_file2
  20. Qwe     wer     aa      rty     123     aa      wyf     yui
  21. Rtu     egj     ee      ioj     567     ee      drt     hio
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP