文件处理
时间:2011-07-01
来源:互联网
本帖最后由 linux68 于 2011-07-01 11:47 编辑
有一个如下格式的文件:
列号: 1 2 3 4 5 6 7 8
2011-06-30 key q4:1$q3:4 f1:10$f6:21$int:19 a1:12$a4:8 c5:10 k9:21$k26:9 10
2011-06-30 key q4:6$q3:6 f1:15$f6:11 a1:22$a4:18 c5:12 k9:11$k26:19
2011-06-30 key q4:3 f1:5 a1:6$a4:6 c5:28 k9:19$k26:11
像3-7这样的列很多,比如说有15列,文件每列之间用tab分隔,我想把文件处理成如下的结果,3-7这样的列里面冒号前面相同的值要相加,如果是像8列这样的列在结果中就不打印了,
请问怎么用awk实现呢?谢谢!
列号
2011-06-30 key 3 q4 10
2011-06-30 key 3 q3 10
2011-06-30 key 4 f1 30
2011-06-30 key 4 f6 32
2011-06-30 key 4 int 19
2011-06-30 key 5 a1 40
2011-06-30 key 5 a4 32
2011-06-30 key 6 c5 50
2011-06-30 key 7 k9 51
2011-06-30 key 7 k26 39
有一个如下格式的文件:
列号: 1 2 3 4 5 6 7 8
2011-06-30 key q4:1$q3:4 f1:10$f6:21$int:19 a1:12$a4:8 c5:10 k9:21$k26:9 10
2011-06-30 key q4:6$q3:6 f1:15$f6:11 a1:22$a4:18 c5:12 k9:11$k26:19
2011-06-30 key q4:3 f1:5 a1:6$a4:6 c5:28 k9:19$k26:11
像3-7这样的列很多,比如说有15列,文件每列之间用tab分隔,我想把文件处理成如下的结果,3-7这样的列里面冒号前面相同的值要相加,如果是像8列这样的列在结果中就不打印了,
请问怎么用awk实现呢?谢谢!
列号
2011-06-30 key 3 q4 10
2011-06-30 key 3 q3 10
2011-06-30 key 4 f1 30
2011-06-30 key 4 f6 32
2011-06-30 key 4 int 19
2011-06-30 key 5 a1 40
2011-06-30 key 5 a4 32
2011-06-30 key 6 c5 50
2011-06-30 key 7 k9 51
2011-06-30 key 7 k26 39
作者: linux68 发布时间: 2011-07-01
QUOTE:
有一个如下格式的文件:
列号: 1 2 3 4 ...
linux68 发表于 2011-07-01 11:05
列号: 1 2 3 4 ...
linux68 发表于 2011-07-01 11:05
$ awk '{for(m=3;m<=NF;m++){split($m,d,/[:\$]/);n=1;while(d[n]){k[$1"\t"$2"\t"m"\t"d[n]]+=d[n+1];n+=2}}}END{n=asorti(k,N);for(t=1;t<=n;t++){print N[t]"\t"k[N[t]]}}' FILE
作者: jason680 发布时间: 2011-07-01
那位朋友给看看,谢谢了,着急 :emn33:
作者: linux68 发布时间: 2011-07-01
本帖最后由 yinyuemi 于 2011-07-01 12:41 编辑
回复 linux68
复制代码
回复 linux68
- $ echo '2011-06-30 key q4:1$q3:4 f1:10$f6:21$int:19 a1:12$a4:8 c5:10 k9:21$k26:9
- 2011-06-30 key q4:6$q3:6 f1:15$f6:11 a1:22$a4:18 c5:12 k9:11$k26:19
- 2011-06-30 key q4:3 f1:5 a1:6$a4:6 c5:28 k9:19$k26:11' |\
- awk '{for(i=3;i<=NF;i++){len=split($i,a,/[:$]/);{for(j=1;j<=len;j++) {n=a[j];j++;b[$1"\t"$2"\t"i"\t"n]+=a[j]}}}}END{for(m in b)print m"\t"b[m]}' |\
- sort -k3,3n
- 2011-06-30 key 3 q3 10
- 2011-06-30 key 3 q4 10
- 2011-06-30 key 4 f1 30
- 2011-06-30 key 4 f6 32
- 2011-06-30 key 4 int 19
- 2011-06-30 key 5 a1 40
- 2011-06-30 key 5 a4 32
- 2011-06-30 key 6 c5 50
- 2011-06-30 key 7 k26 39
- 2011-06-30 key 7 k9 51
作者: yinyuemi 发布时间: 2011-07-01
谢谢楼上的兄弟!
作者: linux68 发布时间: 2011-07-01
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28