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

jon*_*ger 10 linux bash shell awk gawk

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

#!/bin/gawk -f
BEGIN { print FILENAME }
Run Code Online (Sandbox Code Playgroud)

我正在调用文件,./script file1.html但脚本只返回任何内容.有任何想法吗?

kur*_*umi 13

如果你真的想在BEGIN块中使用它,你可以使用ARGV [1]而不是FILENAME

awk 'BEGIN{print ARGV[1]}' file
Run Code Online (Sandbox Code Playgroud)


Hai*_* Vu 9

遇到第1行时可以打印文件名:

FNR == 1
Run Code Online (Sandbox Code Playgroud)

如果你想要不那么神秘,更容易理解:

FNR == 1 {print}
Run Code Online (Sandbox Code Playgroud)

UPDATE

我的前两个解决方案不正确.谢谢Dennis指出来.他的方式是正确的:

FNR == 1 {print FILENAME}
Run Code Online (Sandbox Code Playgroud)


JUS*_*ION 7

直接从手册页(稍微重新格式化):

FILENAME:当前输入文件的名称.如果在命令行中未指定文件,则FILENAME的值为" - ".但是,在BEGIN块内部未定义FILENAME(除非由getline设置).