• 本页内容

60. FILENAME – 当前文件名


当您向 awk 程序指定多个输入文件时, FILENAME 很有用。 这将为您提供 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才能停止从标准输入读取。

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

当您从另一个程序将输入通过管道传输到 awk 时,上述情况也成立,如下所示。 以下还将 FILENAME 打印为-

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

注意BEGIN 块内的 FILENAME 将返回空值 “",因为 BEGIN 块适用于整个 awk 程序,而不适用于任何特定文件。