这两天学习了一下linux经典命令——awk,发现真是个不错的东西,没有早点认识到它的厉害,不然平时可以少写好多处理文件的python脚本啊!
学完就要用,不然就要忘,随手google了一下“awk面试题”,发现一道卡巴斯基面试题:有一个文件scores.txt,内容如下:
jack huaxue 90
tom huaxue 70
jack shuxue 99
tom shuxue 80
要求用shell得到每个人的平均分,思路很简单,要是python的话直接dict记住总分再记住科目数,最后一除就行了。但是要求用shell,怎么办?还好awk就有关联数组的功能,因此写出如下脚本aver.awk:
{
if(NF == 3)
{
if($1 in arr)
{
arr[$1] += $3
cnt[$1]++;
}
else
{
arr[$1] = $3;
cnt[$1] = 1;
}
}
}
END{
for(k in arr)
{
print k " aver:" arr[k]/cnt[k]
}
}
最后运行 awk -f aver.awk scores.txt
得到结果:
jack aver:94.5
tom aver:75
整个过程在一分钟以内,awk确实很强大!