免费注册 查看新帖 |

Chinaunix

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

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

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


    http://bbs.chinaunix.net/thread-2312439-1-1.html
里面的第三点

论坛徽章:
0
32 [报告]
发表于 2012-02-27 14:50 |只看该作者
哥们你看懂了吗?我没看懂啊。。。尤其第一行。。。回复 30# ontherd


   

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


    我加个注释吧,
  1. awk 'BEGIN{S="NULL NULL NULL 0"}
  2. function d(t){ # 自定义函数 d,参数 t
  3. gsub("-"," ",t); # 将t的‘-’全部替换为空格。
  4. "date -d \""t"\" \"+%Y%m%d\""|getline line; # 调用date命令,并将结果传回awk
  5. return line}

  6. {a[d($2)$3"#"ARGIND]=$0; # 建一个数组a存$0, key 是d($2)$3和ARGIND(man下awk,了解下这个变量是什么)
  7. b[$2"#"$3]=d($2)$3 # 数组b,key是$2 $3, value 是 d($2)$3
  8. }

  9. END{for(i=1;i<=asort(b);i++) # 利用asort函数将b数组的value排序
  10. # 下面是你提到的三种情况
  11. {if(a[b[i]"#"1]&&a[b[i]"#"2])
  12. print a[b[i]"#"1] " "a[b[i]"#"2];
  13. else{if(a[b[i]"#"1])print a[b[i]"#"1] " "S;
  14. else{print S" "a[b[i]"#"2]}}}}' file1 file2
复制代码

论坛徽章:
0
34 [报告]
发表于 2012-02-27 15:22 |只看该作者
多谢,不过solaris 8,9,10的环境都无法正常使用,我会找时间调的!多谢!回复 33# yinyuemi


   

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


    "date -d \""t"\" \"+%Y%m%d\""|getline line; # 调用date命令,并将结果传回awk

这句话中,date -d是什么环境的命令?需要完成什么功效。我看是转变下时间格式,然后返回。都是这一行报错,不知道怎么修改呢,呵呵。。。

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


    你想个办法把"21-FEB-12 "变成 20120212 就行,比如在BEGIN里建一个数组 A["FEB]="02" A[JUN]="06" ...

论坛徽章:
0
37 [报告]
发表于 2012-02-27 16:13 |只看该作者
好滴!多谢!回复 36# yinyuemi


   

论坛徽章:
0
38 [报告]
发表于 2012-02-27 16:36 |只看该作者
如果我可以让文件中的时间格式直接变成您需要的格式,整段代码应该怎么写呢?直接删掉函数,然后回复 36# yinyuemi


    awk 'BEGIN{S="NULL NULL NULL 0"}
{a[$2$3"#"ARGIND]=$0;b[$2"#"$3]=$2$3}
END{for(i=1;i<=asort(B);i++){if(a[b"#"1]&&a[b"#"2])print a[b"#"1] " "a[b"#"2];else{if(a[b"#"1])print a[b"#"1] " "S;else{print S" "a[b"#"2]}}}}' file1 file2

但是依旧出错啊。。。纠结了。。。

论坛徽章:
0
39 [报告]
发表于 2012-02-27 22:36 |只看该作者
导入数据库里搞定吧。
select a.*,b.* from testa a,testb b
where a.col2=b.col2
and a.col3=b.col3
union all
select a.*,null,null,null,0
from testa a
left join testb b
on concat(a.col2,a.col3)=concat(b.col2,b.col3)
where b.col2 is null or b.col3 is null
union all
select null,null,null,0,b.*
from testb b
left join testa a
on concat(a.col2,a.col3)=concat(b.col2,b.col3)
where a.col2 is null or a.col3 is null
结果:

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
40 [报告]
发表于 2012-02-28 01:00 |只看该作者
回复 34# 鸟鸟不哥

solaris 还是用perl吧!!!
别跟自己过不去...
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP