gawk高级特性与应用实践
在编程学习中,阅读程序代码是提升编程水平的绝佳途径。对于awk程序,我们可以使用#!让其直接运行,也能通过awk -f …来调用。用awk重新实现标准POSIX程序是一项有趣的练习,它强大的表达能力能让我们用较少的代码实现功能完整且可用的程序。不过,标准awk在处理单个字符时存在不足,使用split()函数并以空字符串作为分隔符可以大大简化这类任务。
允许非十进制输入数据
gawk提供了--non-decimal-data选项,允许输入数据包含非十进制值:
$ echo 0123 123 0x123 | > gawk --non-decimal-data '{ printf "%d, %d, %d\n", $1, $2, $3 }' 83, 123, 291要让这个特性生效,需让gawk将数据视为数值类型。因为print语句会把表达式当作字符串处理,所以要通过给字段加零的方式将其强制转换为数字:
$ echo 0123 123 0x123 | gawk --non-decimal-data ' > { print $1, $2, $3 > print $1 + 0, $2 + 0, $3 + 0 }' 0123 123 0x123 83 123 291