前面有一篇awk 的文章,但是例子太抽象,真正用到的时候想去照抄,发现抄来的完全用不了。完全背离了我写博客的原意。所以重新整理一篇,把我看《The AWK Programming Language》这本书上面的例子都摘录下来,下次码字的时候,能够copy-paste 过来就能跑不报错,真是应了高中语文老师的一句话:天下文章一大抄,看你会抄不会抄。
# 注释
awk 'pattern {action}'
awk '!($3 > 0 || $1 == 0) {print $1, $2*$3}' file.txt
# 按条件过滤( >, <, ==, !=, >=, <= ),数值计算。print $0 打印所有字段
# && 逻辑与 || 逻辑或 !逻辑非
{ printf("total pay for %s is $%.2f\n", $1, $2 * $3) } # 格式化输出 %s->字符串,%.2f->两位小数
{ printf("%-8s $%6.2f\n", $1, $2 * $3) } # %-8s->8位宽度字符串,不够用空格填满。%6.2f->小数点后面两位,总宽度为6位浮点数
# 流程控制
{if ($1 * $2 > 1) print $0}
{i = 1; while (i <= $3) {printf("\t %s", $1); i = i+1;}}
{for (i ; 1; i <; $3; i i + 1) printf("\t%.2f\n", $1 * (1 + $2)) }
ps aux | awk 'NR!=1 BEGIN{...} {a[$1]+=$6} END {for(i in a) print i, a[i]}' # 字段名做下标,遍历打印
进度:29/225