GAWK脚本 - 在BEGIN部分打印文件名

时间:2011-03-26 11:28:26

标签: linux bash shell awk gawk

我正在写一个开始的gawk脚本

#!/bin/gawk -f
BEGIN { print FILENAME }

我通过./script file1.html调用该文件,但脚本只返回任何内容。有什么想法吗?

4 个答案:

答案 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 };