【发布时间】:2011-07-23 10:57:03
【问题描述】:
我正在编写一个开始的 gawk 脚本
#!/bin/gawk -f
BEGIN { print FILENAME }
我通过./script file1.html 调用该文件,但脚本什么也没返回。有什么想法吗?
【问题讨论】:
我正在编写一个开始的 gawk 脚本
#!/bin/gawk -f
BEGIN { print FILENAME }
我通过./script file1.html 调用该文件,但脚本什么也没返回。有什么想法吗?
【问题讨论】:
如果你真的想在 BEGIN 块中使用它,你可以使用 ARGV[1] 代替 FILENAME
awk 'BEGIN{print ARGV[1]}' file
【讨论】:
./script file1.html 是唯一可以运行的方法,那就没问题了。如果你添加了./script --argument1ofn file1.html,你又会被搞砸了。
遇到第1行可以打印文件名:
FNR == 1
如果你想不那么神秘,更容易理解:
FNR == 1 {print}
我的前两个解决方案不正确。谢谢丹尼斯指出。他的方法是正确的:
FNR == 1 {print FILENAME}
【讨论】:
FNR == 1 {print FILENAME}(换句话说,虽然您的“不那么神秘”适用于打印$0,但在这种情况下需要它(和变量名)) .无论如何都要 +1
直接来自手册页(稍微重新格式化):
FILENAME:当前输入文件的名称。如果命令行上没有指定文件,则 FILENAME 的值为“-”。但是,FILENAME 在 BEGIN 块内是未定义的(除非由 getline 设置)。
【讨论】:
基于 Hai Vu 的回答,我建议如果您只希望每个文件打印一次文件名,则需要将其包装在条件中。
if(FNR == 1) { print FILENAME };
【讨论】: