当前位置: 技术问答>linux和unix
【在线等】基本的shell脚本问题【立结贴】
来源: 互联网 发布时间:2016-11-11
本文导语: 有一文件存储用户的上网流量及费用 文件格式如下: 姓名 上行流量 下行流量 费用 john 256 896 156 smith 856 123 456 lily 823 123 456 john...
有一文件存储用户的上网流量及费用
文件格式如下:
姓名 上行流量 下行流量 费用
john 256 896 156
smith 856 123 456
lily 823 123 456
john 842 786 236
用Shell脚本实现统计每个用户的上网次数、总流量、总费用。
当然有很多用户,不可能用那种挨个比较的方法。
求完整可运行Shell脚本代码,初次接触shell,谢谢了。
文件格式如下:
姓名 上行流量 下行流量 费用
john 256 896 156
smith 856 123 456
lily 823 123 456
john 842 786 236
用Shell脚本实现统计每个用户的上网次数、总流量、总费用。
当然有很多用户,不可能用那种挨个比较的方法。
求完整可运行Shell脚本代码,初次接触shell,谢谢了。
|
john 256 896 156
smith 856 123 456
lily 823 123 456
john 842 786 236
↓
a[$1]+=$2;b[$1]+=$3;c[$1]+=$4
↓上面的文件,经过上面的表达式,3个数组的每个相同的元素值累加,数组的下表不一定非的是数字
a[john]+=256->a[john]=256 b[john]+=896->b[john]=896 c[john]+=156c->[john]=156
a[smith]+=856->a[smith]=856 b[smith]+=123->b[smith]=123 c[smith]+=456->c[smith]=456
a[lily]+=823->a[lily]=823 b[lily]+=123->b[lily]=123 c[lily]+=456->c[lily]=456
a[john]+=842->a[john]=256+842 b[john]+=786->b[john]=896+786 c[john]+=236->c[john]=156+236
累加完毕之后
for(i in a)printf "%s %d %d %dn",i,a[i],b[i],c[i]}
这个就是遍历数组 分别打印三个数组里的相同下标数组元素的值
你去简单的看看awk的简单语法 就很容易理解了
smith 856 123 456
lily 823 123 456
john 842 786 236
↓
a[$1]+=$2;b[$1]+=$3;c[$1]+=$4
↓上面的文件,经过上面的表达式,3个数组的每个相同的元素值累加,数组的下表不一定非的是数字
a[john]+=256->a[john]=256 b[john]+=896->b[john]=896 c[john]+=156c->[john]=156
a[smith]+=856->a[smith]=856 b[smith]+=123->b[smith]=123 c[smith]+=456->c[smith]=456
a[lily]+=823->a[lily]=823 b[lily]+=123->b[lily]=123 c[lily]+=456->c[lily]=456
a[john]+=842->a[john]=256+842 b[john]+=786->b[john]=896+786 c[john]+=236->c[john]=156+236
累加完毕之后
for(i in a)printf "%s %d %d %dn",i,a[i],b[i],c[i]}
这个就是遍历数组 分别打印三个数组里的相同下标数组元素的值
你去简单的看看awk的简单语法 就很容易理解了