免费注册 查看新帖 |

Chinaunix

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

一个超复杂的筛选,没思路啊。。。 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2012-02-24 13:47 |只看该作者
没看懂..留名

论坛徽章:
0
22 [报告]
发表于 2012-02-24 14:20 |只看该作者
回复 19# yangkyo821


    RA                   21-FEB-12  1011006    -811381.25

RA                   21-FEB-12  1011008    -37983.99

RA                   21-FEB-12  1011014    -375

RA                   21-FEB-12  1012001    -2338347.7

RA                   21-FEB-12  1012002    -1657967.4

RA                   21-FEB-12  1012003    -132480.69

RA                   21-FEB-12  1012004    -24752.06

RA                   21-FEB-12  1012005    -334518

RA                   21-FEB-12  1012006    -484128

RA                   21-FEB-12  1012007    -201787.4
哥们,如果是这样的文件,是不是应该用到string?可能我举的例子没考虑到这一点,我改了一上午也没把实际的内容实现。。。可能只需要一个参数。。。两个文件的第二列都是类似这样的日期列。。。

论坛徽章:
0
23 [报告]
发表于 2012-02-24 14:36 |只看该作者
这样的文件跟你开始的例子区别在哪呢

论坛徽章:
0
24 [报告]
发表于 2012-02-24 14:42 |只看该作者
我发现个问题啊,不好意思啊,呵呵回复 23# yangkyo821


     cat data1
RA 21-FEB-12 1011006 811381.25
RA 21-FEB-12 1011008 -37983.99
RA 21-FEB-12 1012001 -2338347.7
RA 21-FEB-12 1012004 -24752.06
RA 21-FEB-12 1012005 -334518
RA 21-FEB-12 1012006 -484128
RA 21-FEB-12 1012007 -201787.4
bash-2.03$ cat data2
FIS 21-FEB-12 1011006 811381.25
FIS 21-FEB-12 1011008 37983.99
FIS 21-FEB-12 1011014 375
FIS 21-FEB-12 1012001 2338347.7
FIS 21-FEB-12 1012002 1657967.35
FIS 21-FEB-12 1012003 132480.69
FIS 21-FEB-12 1012004 24752.06
bash-2.03$  /usr/xpg4/bin/awk 'BEGIN{data2="data2";amt="NULL NULL NULL 0"}NR!=1 && c2!=$2{print b;b=""}{a=$0;c2=$2;c3=$3;getline < data2;if(c2==$2 && c3==$3)print a,$0;else{print a,amt;b=b?b RS amt FS $0:amt FS $0}}END{close(data2);print b}' data1
RA 21-FEB-12 1011006 811381.25  FIS 21-FEB-12 1011006 811381.25
RA 21-FEB-12 1011008 -37983.99 FIS 21-FEB-12 1011008 37983.99
RA 21-FEB-12 1012001 -2338347.7 NULL NULL NULL 0
RA 21-FEB-12 1012002 -1657967.4 NULL NULL NULL 0
RA 21-FEB-12 1012004 -24752.06 NULL NULL NULL 0
RA 21-FEB-12 1012005 -334518 NULL NULL NULL 0
RA 21-FEB-12 1012006 -484128 NULL NULL NULL 0
RA 21-FEB-12 1012007 -201787.4
NULL NULL NULL 0 FIS 21-FEB-12 1011014 375
NULL NULL NULL 0 FIS 21-FEB-12 1012001 2338347.7
NULL NULL NULL 0 FIS 21-FEB-12 1012002 1657967.35
NULL NULL NULL 0 FIS 21-FEB-12 1012003 132480.69
NULL NULL NULL 0 FIS 21-FEB-12 1012004 24752.06


哥们,你看RA 21-FEB-12 1012001 -2338347.7这是data1里面的第3行,这一行明显和data2里面的第4行是一样的,说明如果不是对应的行,就无法比较。这个效果和我想要的记录一个然后一直往下比较是有区别的。。。我举的例子的这一行也能够正常输出才对啊!

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


    是这个意思吗?
  1. awk '
  2. BEGIN{S="NULL NULL NULL 0";
  3. while(getline line1 <"file1"){
  4.   split(line1,s1," ");
  5.   getline line2 <"file2";
  6.   split(line2,s2," ");
  7.   if(s2[2] == s1[2] && s2[3] == s1[3]){print line1 " " line2;}
  8.   else{
  9.       m=S " "line2;t=line2;
  10.       while(getline line2 <"file2"){
  11.          split(line2,s2," ");
  12.          if(s2[2] == s1[2] && s2[3] == s1[3]){print line1 " " line2;print m;t=m="";break}
  13.          else{
  14.             m=m RS S" "line2;t=t RS line2
  15.            # print t"#";
  16.          }
  17.       }
  18.     if(m){
  19.      print line1 " " S;
  20.      for(i=1;i<=split(t,n,"\n");i++){
  21.        split(n[i],s2," ");
  22.        while(getline line1<"file1"){
  23.          split(line1,s1," ");
  24.          if(s2[2] == s1[2] && s2[3] == s1[3]){print line1 " " n[i];print x;x=y="";break}
  25.          else{
  26.                    x=line1 " "S;y=line1;
  27.            #print S " " line2
  28.          }
  29.       }
  30.       if(y){
  31.         print S" "n[i]
  32.         for(j=1;j<=split(y,z,"\n");j++){
  33.           split(z[i],s1," ");
  34.                   if(s2[2] == s1[2] && s2[3] == s1[3]){print z[j] " " n[i];break};
  35.                 }
  36.           }
  37.       }
  38.      }
  39.    }
  40.   }
  41. }}'
复制代码

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
26 [报告]
发表于 2012-02-24 16:28 |只看该作者
本帖最后由 yinyuemi 于 2012-02-24 16:35 编辑

==

论坛徽章:
0
27 [报告]
发表于 2012-02-24 16:48 |只看该作者
哥们,你大牛啊!小弟拜服ing。。。无限期待中。。。回复 25# yinyuemi


   

论坛徽章:
2
射手座
日期:2014-10-10 15:59:4715-16赛季CBA联赛之上海
日期:2016-03-03 10:27:14
28 [报告]
发表于 2012-02-25 01:09 |只看该作者
本帖最后由 yinyuemi 于 2012-02-25 03:41 编辑

回复 27# 鸟鸟不哥


    换个思路吧,之前那个不行,不过这个可能会效率会慢些。
  1. awk 'BEGIN{S="NULL NULL NULL 0"}
  2. function d(t){gsub("-"," ",t);"date -d \""t"\" \"+%Y%m%d\""|getline line;return line}
  3. {a[d($2)$3"#"ARGIND]=$0;b[$2"#"$3]=d($2)$3}
  4. END{for(i=1;i<=asort(b);i++){if(a[b[i]"#"1]&&a[b[i]"#"2])print a[b[i]"#"1] " "a[b[i]"#"2];else{if(a[b[i]"#"1])print a[b[i]"#"1] " "S;else{print S" "a[b[i]"#"2]}}}}' file1 file2
  5. RA 21-FEB-12 1011006 811381.25 FIS 21-FEB-12 1011006 811381.25
  6. RA 21-FEB-12 1011008 -37983.99 FIS 21-FEB-12 1011008 37983.99
  7. NULL NULL NULL 0 FIS 21-FEB-12 1011014 375
  8. RA 21-FEB-12 1012001 -2338347.7 FIS 21-FEB-12 1012001 2338347.7
  9. NULL NULL NULL 0 FIS 21-FEB-12 1012002 1657967.35
  10. NULL NULL NULL 0 FIS 21-FEB-12 1012003 132480.69
  11. RA 21-FEB-12 1012004 -24752.06 FIS 21-FEB-12 1012004 24752.06
  12. RA 21-FEB-12 1012005 -334518 NULL NULL NULL 0
  13. RA 21-FEB-12 1012006 -484128 NULL NULL NULL 0
  14. RA 21-FEB-12 1012007 -201787.4 NULL NULL NULL 0
复制代码

论坛徽章:
0
29 [报告]
发表于 2012-02-27 08:40 |只看该作者
周末愉快啊,大哥!不过#是什么意思啊?没看懂。。。回复 28# yinyuemi


   

论坛徽章:
0
30 [报告]
发表于 2012-02-27 14:29 |只看该作者
回复 28# yinyuemi

仰望牛人写的,膜拜


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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP