shell 常用命令解决统计问题

1 需求统计网络ss -nta下面各个状态的数量结果如下

LISTEN 17
ESTAB 22

1 awk统计法

ss -nta | awk '!/State/{STATE[$1]++}END{for(i in STATE) {print i,STATE[i]}}'

2 sort+uniq统计法

ss -nta | awk '!/State/{print $1}' | sort | uniq -c

2 根据学生的性别分别统计出男女学生的总分

score.txt 内容如下,

name   sex score
alice  f   100
bob    m   96
tom    m   98
mary   f   50
peter  m   92

需要获得最后的统计信息

第一步去掉第一行标题,保留学生信息

awk 'NR>=2' score.txt  

第二步 统计男女人数

awk 'NR>=2{sex[$2]++}END{for(i in sex){print i,sex[i]}}' score.txt

这里的sex[$2]++是对第二列sex列的男女生数量分别进行人数统计

sex[$2]这种表达形式可以理解为Py种的字典或者java中的map

输出结果如下

m 3
f 2

第三步 统计男女各自的总分

awk 'NR>=2{sex[$2]++;score[$2]+=$3}END{for(i in sex){print i,sex[i], score[i]}}' score.txt   

这里的score[$2]+=$3相当于根据$2也就是sex这个键,来获取$3也就是score分数,并且通过+=来进行男女生分别求和

输出结果如下

m 3 286
f 2 150

用if else来写

awk 'NR>=2{if($2=="m"){m_sum+=$3;m_num++}else{f_sum+=$3;f_num++}}END{print "男生总成绩:"m_sum,"女生总成绩:"f_sum}' score.txt 

此处定义了四个变量分别为男生总分数m_sum,女生总分数f_sum,男生总人数m_num,女生总人数f_num,用$2 sex来判断是否为m还是为f来决定男女生分数和人数的分别求和

输出结果

男生总成绩:286 女生总成绩:150

可以根据上述结果自行来写下男女生各有多少人

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福爱娃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值