免费注册 查看新帖 |

Chinaunix

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

跨文件比对关键字 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2012-05-23 19:39 |只看该作者
     

只会在一个文件中唯一,另一个文件中重复的处理方法。。

这跟两个文件中都重复的情况究竟是差别在什么地方??

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
12 [报告]
发表于 2012-05-24 08:31 |只看该作者
怿_mao44 发表于 2012-05-23 18:43
回复 9# rdcwayx

我这里测试的结果很正常。 如果你在Solaris下,请用nawk 或者 /usr/xpg4/bin/awk
  1. $ cat file1.txt
  2. AATK    aa_001080395    17   79091095        79139872        1155    1414    0.2512  687     841     0.2533

  3. $ cat file2.txt
  4. 1250    AATK    aa_001080395
  5. 3065    AATK    aa_001080395
  6. 338     AATK    aa_001080395

  7. $ awk 'NR==FNR{key[$2]++;a[$2 FS key[$2]]=$0;next}
  8. $3 in key {for (i=1;i<=key[$3];i++) print a[$3 FS i], $0}' OFS="\t"  file1.txt file2.txt
  9. AATK    aa_001080395    17   79091095        79139872        1155    1414    0.2512  687     841     0.2533     1250    AATK    aa_001080395
  10. AATK    aa_001080395    17   79091095        79139872        1155    1414    0.2512  687     841     0.2533     3065    AATK    aa_001080395
  11. AATK    aa_001080395    17   79091095        79139872        1155    1414    0.2512  687     841     0.2533     338     AATK    aa_001080395
复制代码

论坛徽章:
15
2015年辞旧岁徽章
日期:2015-03-03 16:54:15双鱼座
日期:2015-01-15 17:29:44午马
日期:2015-01-06 17:06:51子鼠
日期:2014-11-24 10:11:13寅虎
日期:2014-08-18 07:10:55酉鸡
日期:2014-04-02 12:24:51双子座
日期:2014-04-02 12:19:44天秤座
日期:2014-03-17 11:43:36亥猪
日期:2014-03-13 08:13:51未羊
日期:2014-03-11 12:42:03白羊座
日期:2013-11-20 10:15:18CU大牛徽章
日期:2013-04-17 11:48:45
13 [报告]
发表于 2012-05-24 08:35 |只看该作者
本帖最后由 rdcwayx 于 2012-05-24 08:36 编辑
怿_mao44 发表于 2012-05-23 19:39
只会在一个文件中唯一,另一个文件中重复的处理方法。。
这跟两个文件中都重复的情况究竟是差别在什么地方?? ...

考虑的条件会少些,代码也可以更简单些。
比如以你现有的例子,file1.txt里的关键字能保证唯一的话,下面的代码就会很短了。
  1. awk 'NR==FNR{a[$2]=$0;next}
  2.     $3 in a{print a[$3],$0}' file1.txt file2.txt
复制代码

论坛徽章:
0
14 [报告]
发表于 2012-05-24 09:42 |只看该作者
楼主试试这个:
  1. awk 'NR==FNR{a[$2]=a[$2]?$0"|"a[$2]:$0};NR>FNR{if(a[$3]){split(a[$3],b,"|");for(i=1;i<=length(b);i++){print b[i]"\t"$0}}}' file1 file2
复制代码
如果数据本来就够多,并且在数据库的话,可以试试是JOIN.

论坛徽章:
0
15 [报告]
发表于 2012-05-24 09:50 |只看该作者
回复 12# rdcwayx

我不是Solaris操作系统,不知道为什么,仍然无法正常运行命令,是否有其他的方式呢?
  1. $ cat /proc/version
  2. Linux version 2.6.18-194.el5 (mockbuild@x86-005.build.bos.redhat.com) (gcc version 4.1.2 20080704 (Red Hat 4.1.2-48)) #1 SMP Tue Mar 16 21:52:39 EDT 2010
  3. $ lsb_release -a
  4. LSB Version:    :core-3.1-amd64:core-3.1-ia32:core-3.1-noarch:graphics-3.1-amd64:graphics-3.1-ia32:graphics-3.1-noarch
  5. Distributor ID: RedHatEnterpriseServer
  6. Description:    Red Hat Enterprise Linux Server release 5.5 (Tikanga)
  7. Release:        5.5
  8. Codename:       Tikanga
复制代码

论坛徽章:
0
16 [报告]
发表于 2012-05-24 09:56 |只看该作者
回复 14# jiejie455


       仍然也没有结果输出

难道是这几天我RP未爆发,明明测试有结果的命令都无法输出任何结果,对不住大家,也不知道是什么问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP