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
可以根据上述结果自行来写下男女生各有多少人