免费注册 查看新帖 |

Chinaunix

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

求一个文本处理脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-08-16 10:44 |只看该作者 |倒序浏览
我有一个文本,格式如下:
4301|2010/08/01|17.0|
4302|2010/08/01|12.0|
4303|2010/08/01|43.0|
4305|2010/08/01|42.0|
4306|2010/08/01|32.0|
4307|2010/08/01|28.0|
4308|2010/08/01|6.0|
4309|2010/08/01|36.0|
4310|2010/08/01|14.0|
4311|2010/08/01|31.0|
4312|2010/08/01|12.0|
4325|2010/08/01|12.0|
4331|2010/08/01|7.0|
4301|2010/08/02|27.0|
4302|2010/08/02|16.0|
4303|2010/08/02|53.0|
4304|2010/08/02|16.0|
4305|2010/08/02|36.0|
4306|2010/08/02|24.0|
4307|2010/08/02|22.0|
4308|2010/08/02|1.0|
4309|2010/08/02|31.0|
4310|2010/08/02|41.0|
4311|2010/08/02|34.0|
4312|2010/08/02|8.0|
4325|2010/08/02|15.0|
4331|2010/08/02|9.0|
4301|2010/08/03|28.0|
4302|2010/08/03|28.0|
4303|2010/08/03|49.0|
4304|2010/08/03|53.0|
4305|2010/08/03|38.0|
4306|2010/08/03|30.0|
4307|2010/08/03|32.0|
4308|2010/08/03|2.0|
4309|2010/08/03|36.0|
4310|2010/08/03|22.0|
4311|2010/08/03|24.0|
4312|2010/08/03|19.0|
4325|2010/08/03|17.0|
4331|2010/08/03|12.0|
可以采用什么命令运行后,
      2010/08/01  2010/08/02  2010/08/03
4301        17         27         28
4302        12         16         28
4303        43         53         49
4304        0        16         53
4305        42         36         38
4306        32         24         30
4307        28         22         32
4308        6         1         2
4309        36         31         36
4310        14         41         22
4311        31         34         24
4312        12         8         19
4325        12         15         17
4331        7         9         12
先谢谢大家了

论坛徽章:
0
2 [报告]
发表于 2010-08-16 10:51 |只看该作者
回复 1# ztj111


    awk 'BEGIN{FS="|";print "      2010/08/01  2010/08/02  2010/08/03" }{a[$1]=a[$1]"       "$3}END{for(i in a){print i" "a | "sort"}}' test7.tx
      2010/08/01  2010/08/02  2010/08/03
4301        17.0       27.0       28.0
4302        12.0       16.0       28.0
4303        43.0       53.0       49.0
4304        16.0       53.0
4305        42.0       36.0       38.0
4306        32.0       24.0       30.0
4307        28.0       22.0       32.0
4308        6.0       1.0       2.0
4309        36.0       31.0       36.0
4310        14.0       41.0       22.0
4311        31.0       34.0       24.0
4312        12.0       8.0       19.0
4325        12.0       15.0       17.0
4331        7.0       9.0       12.0

论坛徽章:
0
3 [报告]
发表于 2010-08-16 11:06 |只看该作者
回复 2# iori809


    你好,还有点没有满足要求
4304        0        16         53
你的程序的结果是
4304        16.0       53.0

论坛徽章:
0
4 [报告]
发表于 2010-08-16 11:10 |只看该作者
还有一点,你的程序我在aix上运行怎么没有结果产生。
     2010/08/01  2010/08/02  2010/08/03

4301
4302
4303
4304
4305
4306
4307
4308
4309
4310
4311
4312
4325
4331

出来就是这个东西

求职 : 技术支持/维
论坛徽章:
0
5 [报告]
发表于 2010-08-16 11:17 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
6 [报告]
发表于 2010-08-16 11:23 |只看该作者
回复 5# 99超人


asort这个函数是您定义的?

论坛徽章:
0
7 [报告]
发表于 2010-08-16 11:25 |只看该作者
回复  99超人


asort这个函数是您定义的?
ztj111 发表于 2010-08-16 11:23



是自带的吧

求职 : 技术支持/维
论坛徽章:
0
8 [报告]
发表于 2010-08-16 11:26 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
0
9 [报告]
发表于 2010-08-16 11:40 |只看该作者
为什么你们都那么虚幻呢

论坛徽章:
0
10 [报告]
发表于 2010-08-16 11:45 |只看该作者
本帖最后由 ywlscpl 于 2010-08-16 12:01 编辑

回复 1# ztj111
没有asort排序是比较麻烦
试试
  1. awk -F '|' '!a[$2]++{b[++n]=$2}{c[$1","$2]+=$3;d[$1]}END{for (i=1;i<=n;i++) printf "   "b[i];print "";for (i in d) {printf i;for (j=1;j<=n;j++) printf "\t"(i","b[j] in c?c[i","b[j]]:0);print ""}}' file  | sort
复制代码
?表达式也应该不支持
改下
  1. awk -F '|' '!a[$2]++{b[++n]=$2}{c[$1","$2]+=$3;d[$1]}END{for (i=1;i<=n;i++) printf "   "b[i];print "";for (i in d) {printf i;for (j=1;j<=n;j++) {printf "\t";if (i","b[j] in c) printf c[i","b[j]];else printf "0"}print ""}}' file  | sort  
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP