免费注册 查看新帖 |

Chinaunix

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

又遇难题,恳请帮助 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-10-03 21:01 |只看该作者
我们perlers 也不能输给awk阿:wink:

  1. #!/usr/bin/perl
  2. die "Usage: $0 [input]" if ! open my $FILE, "<", shift @ARGV;
  3. my (%left, @right, @file);
  4. while (<$FILE>){
  5.     my @temp = m{[\w\.\-]+}gxms;
  6.     push @right, pop @temp;
  7.     push @file, join '/', @temp;
  8.     %left = (%left, map {$_=>$.} @temp);
  9. }
  10. @res = grep {$left{$_}} @right;
  11. print $file[$left{$_}-1]."\t".$_."\n" for (@res);
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
12 [报告]
发表于 2010-10-03 21:37 |只看该作者
回复 11# hufeiyc


    囧

论坛徽章:
0
13 [报告]
发表于 2010-10-03 21:54 |只看该作者
AWK看着还是蛮简洁的

论坛徽章:
0
14 [报告]
发表于 2010-10-08 15:24 |只看该作者
:wink:

论坛徽章:
0
15 [报告]
发表于 2010-10-08 20:42 |只看该作者
回复 1# bioinfor

代码很丑陋,不知道符合要求不。主要分了几种情况:
NF=4,类似于STYXL1 / DUSP24 PLEKHA3
NF=3,类似于STYXL1 / DUSP24
NF=2,类似于STYXL1 DUSP24
NF=1,类似于STYXL1
name[]用来记录STYXL1->STYXL1 / DUSP24 这种关系
count[]用来记录STYXL1前面出现的次数
  1. #!/usr/bin/gawk
  2. {
  3.     if(NF==4) {
  4.         if(count[$1]) print $1,$2,$3,name[$1];
  5.         if(count[$2])  print $1,$2,$3,name[$3];
  6.         if(count[$4]) print $4,name[$4];
  7.         name[$1]=$1" / "$3;
  8.         name[$3]=$1" / "$3;
  9.         name[$4]=$4;
  10.     }
  11.     else if(NF==3){
  12.         if(count[$1]) print $1,$2,$3,name[$1];
  13.         if(count[$3]) print $1,$2,$3,name[$3];
  14.         name[$1]=$1" / "$3;
  15.         name[$3]=$1" / "$3;
  16.     }
  17.     else if(NF==2){
  18.         if(count[$1]) print $1,name[$1];
  19.         if(count[$2]) print $2,name[$2];
  20.         name[$1]=$1;
  21.         name[$2]=$2;
  22.     }
  23.     else name[$1]=$1;

  24.     for(i=1;i<=NF;i++)
  25.         if($i=="/") continue;
  26.         else ++count[$i];
  27. }
复制代码

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
16 [报告]
发表于 2012-08-06 16:29 |只看该作者
expert1 发表于 2010-10-03 13:12
回复 1# bioinfor

一点都不难,但是比较烦,囧。


求助大拿,我测试这个脚本不通。无报错,
还有为啥要用awk test.awk Book3 Book3 ??
不解,望详解。

BTW, 顺便想了解下高手是如何炼成的?有啥见解?
谢谢。

偶在进阶。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
17 [报告]
发表于 2012-08-08 15:50 |只看该作者
回复 16# wenhq


    faint,挖坟考古啊。

为啥处理2次,因为楼主要求第一个单元格和第二个单元格相比较,有相同的就打印出来,所以awk第一次处理book记录第一个单元格的内容,然后第二次的时候把数组的内容和第二列相比较。

高手谈不上,所以我也没什么经验。但估计无他唯手熟尔,高手的秘籍吧。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
18 [报告]
发表于 2012-08-08 15:51 |只看该作者
测试不通?或许楼主换了数据吧。

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-10-02 06:20:00IT运维版块每月发帖之星
日期:2015-09-11 19:30:52IT运维版块每周发帖之星
日期:2015-09-11 19:20:31IT运维版块每日发帖之星
日期:2015-08-26 06:20:00每日论坛发贴之星
日期:2015-08-20 06:20:00IT运维版块每日发帖之星
日期:2015-08-20 06:20:002015年辞旧岁徽章
日期:2015-03-03 16:54:15金牛座
日期:2014-05-04 16:58:09双子座
日期:2013-12-17 16:44:37辰龙
日期:2013-11-22 15:20:59狮子座
日期:2013-11-18 22:55:08射手座
日期:2013-11-12 10:54:26
19 [报告]
发表于 2012-08-08 16:13 |只看该作者
回复 18# expert1

没换数据。。。问题是为啥要Book3 2次。

   

论坛徽章:
16
IT运维版块每日发帖之星
日期:2015-08-24 06:20:00综合交流区版块每日发帖之星
日期:2015-10-14 06:20:00IT运维版块每日发帖之星
日期:2015-10-25 06:20:00IT运维版块每日发帖之星
日期:2015-11-06 06:20:00IT运维版块每日发帖之星
日期:2015-12-10 06:20:00平安夜徽章
日期:2015-12-26 00:06:302016猴年福章徽章
日期:2016-02-18 15:30:34IT运维版块每日发帖之星
日期:2016-04-15 06:20:00IT运维版块每日发帖之星
日期:2016-05-21 06:20:00综合交流区版块每日发帖之星
日期:2016-08-16 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-14 06:20:00
20 [报告]
发表于 2012-08-09 13:41 |只看该作者
回复 19# wenhq


    因为大致处理思路是第二列和第二列比较,不知你看明白楼主需求木有呢? 所以第一次先把第一列存到数组里,第二次处理book3的时候把第二列和存到数据的比较。

只是一个思路而已,突然感觉你没明白NR和FNR的关系?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP