我正在编写一个开始的 gawk 脚本
#!/bin/gawk -f
BEGIN { print FILENAME }
我通过调用文件,./script file1.html
但脚本什么也不返回。有任何想法吗?
如果你真的想在 BEGIN 块中使用它,你可以使用 ARGV[1] 而不是 FILENAME
awk 'BEGIN{print ARGV[1]}' file
遇到第 1 行时可以打印文件名:
FNR == 1
如果你想不那么神秘,更容易理解:
FNR == 1 {print}
我的前两个解决方案不正确。谢谢丹尼斯指出。他的方法是正确的:
FNR == 1 {print FILENAME}
直接来自手册页(稍微重新格式化):
FILENAME:当前输入文件的名称。如果命令行中没有指定文件,则 FILENAME 的值为“-”。但是,FILENAME 在 BEGIN 块内未定义(除非由 getline 设置)。
基于 Hai Vu 的回答,我建议如果您只希望每个文件打印一次文件名,则需要将其包装在条件中。
if(FNR == 1) { print FILENAME };