【译】 AWK教程指南 3计算并打印文件中指定的字段数据
awk 处理数据时,它会自动从数据文件中一次读取一条记录,并会将该记录切分成一个个的字段;程序中可使用 $1, $2,... 直接取得各个字段的内容。这个特色让使用者易于用 awk 编写 reformatter 来改变数据格式。
范例:以数据文件 emp.dat 为例,计算每人应发工资并打印报表。
分析:awk 会自行一次读入一条记录,故程序中仅需告诉 awk 如何处理所读入的数据行。
执行如下命令:($ 表UNIX命令行上的提示符)
$ awk '{ print $2, $3 * $4 }' emp.dat
执行结果如下:
屏幕出现:
说明:
1. UNIX命令行上,执行awk的语法为:
$ awk 'awk程序' 要处理的数据文件名
本范例中的 程序部分为 {print $2, $3 * $4}。把程序置于命令行时,程序之前后必须以 ' (单引号)括住。
2. emp.dat 为指定给该程序处理的数据文件名。
3. 本程序中使用:Pattern { Actions } 语法。
Pattern | Actions |
print $2, $3 * $4 |
4. print为 awk 所提供的输出指令,会将数据输出到stdout(屏幕)。print 的参数间彼此以 "," (逗号) 隔开,打印出数据时彼此间会以空白隔开。(参考 附录 D 内置变量OFS)
5. 将上述的 程序部分 储存于文件 pay1.awk 中,执行命令时再指定 awk程序文件 的文件名。这是执行awk的另一种方式,特别适用于程序较大的情况,其语法如下:
$ awk -f awk程序文件名 数据文件名
故执行下列两命令,将产生同样的结果。
$ awk -f pay1.awk emp.dat
$ awk '{ print $2, $3 * $4 }' emp.dat
读者可使用 "-f" 参数,让awk主程序使用“其它 仅含 awk函数 的程序文件中的函数 ”
其语法如下:
$ awk -f awk主程序文件名 -f awk函数文件名 数据文件名
(有关 awk 中函数的声明与使用于 7.4 中说明)
6. awk中也提供与 C 语言中类似用法的 printf() 函数,使用该函数可进一步控制数据的输出格式。
编辑另一个awk程序如下,并取名为 pay2.awk
{ printf("%6s Work hours: %3d Pay: %5d\n", $2, $3, $3 * $4) }
执行下列命令
$ awk -f pay2.awk emp.dat
执行结果屏幕出现: