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