awk

FILENAME-当前文件名

FILENAME 是有用的 当你指定多个输入文件到awk程序时,它将为你显示awk的当前处理的文件名

$ awk '{print FILENAME}' employee.txt employee-multiple-fs.txt
employee.txt
employee.txt
employee.txt
employee.txt
employee.txt
employee-multiple-fs.txt
employee-multiple-fs.txt
employee-multiple-fs.txt
employee-multiple-fs.txt
employee-multiple-fs.txt

当你从标准输入读取变量时,FILENAME 变量将被设置“-”值。在下面的例子,因为我们没有给任何输入文件,你应该输入记录在标准输入里。

在这个例子里,我输入第一行”John Doe”, 然后awk打印最后两行,你可以按ctrl-c 停止stdin读入

$ awk '{print "Last name: ",$2; print "Filename:", FILENAME}'
John Doe
Last name:  Doe
Filename: -
^C

当你从另外一个程序管道输入到awk,也是可以的,显示如下。 下面同样打钱FILENAME为-

$ echo "John Doe" | awk '{ print "Last name:", $2;print "Filename:", FILENAME}'
Last name: Doe
Filename: -

注意:FILENAME在BEGIN块里将返回空值,作为BEGIN块是整个awk程序,而不是为任何特定的文件。