免费注册 查看新帖 |

Chinaunix

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

关于这个文本咋整? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-10-11 16:56 |只看该作者 |倒序浏览
[aluns]~/sy/tmp>cat aa
s       030301340000062
s       030301340000096
cj      030301340000070
r       030301340000229
r       030301340000088
h       030301340000245
h       030301340000104
i       030301340012422
i       030301340000112
--------------------------------
[aluns]~/sy/tmp>cat ab
030301340000062 116098.83       0.00            116098.83
030301340000096 177444.50       0.00            177444.50
030301340000070 1323963.84      0.00            1323963.84
030301340000229 1922722.54      0.00            1922722.54
030301340000088 51488.22        0.00            51488.22
030301340000245 73730.93        0.00            73730.93
030301340000104 4639.58         0.00            4639.58
030301340012422 14822.99        0.00            14822.99
030301340000112 5302.40         0.00            5302.40



现在要把 aa 文件中第一列相同的 关于ab 后三列数值累加起来。


最终结果为

s        030301340000062 116098.83       0.00            116098.83
s        030301340000096 177444.50       0.00            177444.50

                        293543.33        0.00                293543.33


是不是可以有awk 数组做呀,

论坛徽章:
0
2 [报告]
发表于 2005-10-11 23:49 |只看该作者

关于这个文本咋整?


  1. awk 'NR==FNR{ab1[$1]=$0}
  2.         NR!=FNR{aa[$1]++;
  3.                 total[$1]=total[$1]"\n"$1" "ab1[$2];
  4.                 split(sum[$1],tmp1," ");
  5.                 split(ab1[$2],tmp2," ");
  6.                 sum[$1]=sprintf("%.2f %.2f %.2f\n",tmp1[1]+tmp2[2],tmp1[2]+tmp2[3],tmp1[3]+tmp2[4]);
  7.         }
  8.         END{
  9.                 for(i in aa)
  10.                 {
  11.                         if(aa[i]>=2)
  12.                         {
  13.                                 print total[i];
  14.                                 print sum[i];
  15.                         }
  16.                 }
  17. }'ab aa

复制代码



h 030301340000245 73730.93        0.00            73730.93
h 030301340000104 4639.58         0.00            4639.58
78370.51 0.00 78370.51


i 030301340012422 14822.99        0.00            14822.99
i 030301340000112 5302.40         0.00            5302.40
20125.39 0.00 20125.39


r 030301340000229 1922722.54      0.00            1922722.54
r 030301340000088 51488.22        0.00            51488.22
1974210.76 0.00 1974210.76


s 030301340000062 116098.83       0.00            116098.83
s 030301340000096 177444.50       0.00            177444.50
293543.33 0.00 293543.33

[ 本帖最后由 wmjie 于 2005-11-22 22:08 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2005-10-12 09:10 |只看该作者

关于这个文本咋整?

厉害

论坛徽章:
0
4 [报告]
发表于 2005-11-22 15:40 |只看该作者
原帖由 wmjie 于 2005-10-11 23:49 发表
[code]
awk 'NR==FNR{ab1[$1]=$0}
        NR!=FNR{aa[$1]++;
                total[$1]=total[$1]"n"$1" "ab1[$2];
                split(sum[$1],tmp1," ");
           ...



厉害、


谁换个写法

论坛徽章:
0
5 [报告]
发表于 2005-11-22 17:23 |只看该作者
原帖由 wmjie 于 2005-10-11 23:49 发表
[code]
awk 'NR==FNR{ab1[$1]=$0}
        NR!=FNR{aa[$1]++;
                total[$1]=total[$1]"n"$1" "ab1[$2];
                split(sum[$1],tmp1," ");
           ...

厉害!

论坛徽章:
1
荣誉会员
日期:2011-11-23 16:44:17
6 [报告]
发表于 2005-11-22 17:57 |只看该作者
原帖由 wmjie 于 2005-10-11 23:49 发表
[code]
awk 'NR==FNR{ab1[$1]=$0}
        NR!=FNR{aa[$1]++;
                total[$1]=total[$1]"n"$1" "ab1[$2];
                split(sum[$1],tmp1," ";
           ...

awk强人!!! :em11:

论坛徽章:
0
7 [报告]
发表于 2005-11-22 22:12 |只看该作者
2楼的真厉害,我那本《awk与sed第二版》我才看了20页

估计看完了也比不上2楼的弓虽啊!

论坛徽章:
0
8 [报告]
发表于 2005-11-23 00:21 |只看该作者
原帖由 大蚂蚁 于 2005-11-22 22:12 发表
2楼的真厉害,我那本《awk与sed第二版》我才看了20页

估计看完了也比不上2楼的弓虽啊!



上哪下载呀??我没找到?

论坛徽章:
0
9 [报告]
发表于 2005-11-23 12:54 |只看该作者
原帖由 技安 于 2005-11-23 00:21 发表



上哪下载呀??我没找到?


chinapub买的

论坛徽章:
0
10 [报告]
发表于 2005-11-23 17:13 |只看该作者
中文的吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP