免费注册 查看新帖 |

Chinaunix

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

使用AWK的关联数组,测试Demo [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-11-03 20:50 |只看该作者 |倒序浏览
Shell下AWK关联数组.只是简单的测试了一下使用的方法。
可以利用关联数组处理文本中分类数据的加总和求值。
如果一条一条的读入、判断分类、再加总就比较麻烦了。


测试用法:
$ cat zz.txt
A,0.50,1.20
A,0.3,1.81
B,0.1,0.08
B,0.3,0.6
C,1.0,1,7
C,1.0,1.9
C,3.2,1.6


按照第一项的大类,对某一列加总
$ cat zz122.sh
#!/bin/sh


awk -F',' '{
               grp[$1] += $2
            }
            END {
                 for (gr11 in grp)
                      printf "%s : %f\n", gr11, grp[gr11]

            }
           ' zz.txt;

$ ./zz122.sh
A : 0.800000
B : 0.400000
C : 5.200000

按照第一项的其中一类,对每一列加总 ,测试没用数组
$ cat zz123.sh
#!/bin/sh


awk -F',' -v type="A"  '$1==type {
                 total1 += $2
                 total2 += $3
                 cnt += 1
            }
            END {
                 print total1/cnt,total2/cnt
            }
           ' zz.txt;

$ ./zz123.sh
0.4 1.505

按照第一项的其中一类,对每一列加总,求平均值
$ cat zz121.sh
#!/bin/sh

awk -F',' -v type="A"  '$1==type {
              for (i=2; i<=NF; i++)
                 total += $i
              cnt += 1
            }
            END {
                 for (i=2; i<=NF; i++)
                     printf "%s,", total/cnt
                     printf "\n"
            }
           ' zz.txt;
$ ./zz121.sh
0.4,1.505,


对每一行进行加总 求平均数 和总的平均数
$ cat zz120.sh
#!/bin/sh

awk -F','  '{
                for (i=2; i<=NF; i++) {
                   totalline[NR] += $i;
                }
                cnt += 1;
                print totalline[NR],cnt,NR,totalline[NR]/(NF-1);
            }
            END {
                 for (i=1; i<=FNR; i++) {
                     total += totalline;
                 }
                 printf "total: %s num %s average %s \n",total,FNR,total/FNR;
           }' zz.txt;

$ ./zz120.sh
1.7 1 1 0.85
2.11 2 2 1.055
0.18 3 3 0.09
0.9 4 4 0.45
9 5 5 3
2.9 6 6 1.45
4.8 7 7 2.4
total: 21.59 num 7 average 3.08429



还有是shell变量在Awk中的引用的测试:

#!/bin/sh
i=1
echo "12:30:00" | awk 'BEGIN {FS=":"} {print $'$i'":"$('$i'+1)+15":"$3}';



结果:12:45:00

发上来方便备查。。。。。。

[ 本帖最后由 zglcl008 于 2006-11-3 20:53 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP