鉴于之前用awk只了解到点皮毛,而且工作中用之甚少,这里准备了解并整理一下awk的用法,尽量保证
一个公式覆盖大部分需求
通用公式
- 通用公式并不是所有场景都能满足,只是符合awk基础使用的大部分场景
- awk调用主要包括两种:
XXXX | awk.script
或者awk.script filename
- awk.script通用公式如下:
awk -F '分隔符(默认\t)' '
BEGIN {print "可定义变量或者打印题头";size=0;}
{print "awk逻辑语句可以有判断或者循环,语法和其他语言保持一致";
if($1!=0){
size=size+$1;
}
}
END {print "可打印结果或重定向";print "size is: ",size}
'
公式说明:
1.执行的时候
串行执行
;
2.先执行BEGIN
内的脚本,主要是打印题头或者变量初始化;
3.再按照调用读数据源,\\n
分割作为一条记录,按照指定的分隔符进行切分,结果类似于数组,我们使用$1,$2(1开头)调用对应的数据,然后执行awk逻辑语句(可以有循环或者判断等);
4.再执行END
内的脚本,包括输出结果等;
开始测试
- 准备数据
personal.txt
jack 16 shanghai
tom 20 shenzhen
mary 19 beijing
- 需求1:统计年满18岁同学的总年纪
awk -F ' ' '
BEGIN {totalAge=0;}
{
if($2>18){
totalAge=totalAge+$2;
}
}
END {print "totalAge is: ",totalAge}
' personal.txt
当然上面的实现可以适当的进行简化,暂时就不加赘述,本文旨在创建通用模板,快速使用并上手awk
- 需求2:求所有同学的平均年纪
使用内置计数器NR或者自己按需求统计也可以
awk -F ' ' '
BEGIN {totalAge=0;}
{
totalAge=totalAge+$2;
}
END {print "averageAge is: ",totalAge/NR}
' personal.txt
结语
当然awk的功能不仅限于此,此笔记的目的在于快速回忆起awk的使用方法,尽量覆盖大部分的需求