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

发布于 2024-10-26 03:51:18 字数 162 浏览 1 评论 0原文

我正在编写一个 gawk 脚本,开始时

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

我通过 ./script file1.html 调用该文件,但该脚本什么也不返回。有什么想法吗?

I am writing a gawk script that begins

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

I am calling the file via ./script file1.html but the script just returns nothing. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

攒眉千度 2024-11-02 03:51:18

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

awk 'BEGIN{print ARGV[1]}' file

you can use ARGV[1] instead of FILENAME if you really want to use it in BEGIN block

awk 'BEGIN{print ARGV[1]}' file
黑凤梨 2024-11-02 03:51:18

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

FNR == 1

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

FNR == 1 {print}

更新

我的前两个解决方案是不正确的。谢谢丹尼斯指出这一点。他的做法是正确的:

FNR == 1 {print FILENAME}

You can print the file name when encounter line 1:

FNR == 1

If you want to be less cryptic, easier to understand:

FNR == 1 {print}

UPDATE

My first two solutions were incorrect. Thank you Dennis for pointing it out. His way is correct:

FNR == 1 {print FILENAME}
郁金香雨 2024-11-02 03:51:18

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

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

Straight from the man page (slightly reformatted):

FILENAME: The name of the current input file. If no files are specified on the command line, the value of FILENAME is “-”. However, FILENAME is undefined inside the BEGIN block (unless set by getline).

岁月流歌 2024-11-02 03:51:18

根据 Hai Vu 的回答,我建议如果您只想为每个文件打印一次文件名,则需要将其包含在条件中。

if(FNR == 1) { print FILENAME };

Building on Hai Vu's answer I suggest that if you only want the filename printed once per file it needs to be wrapped in a conditional.

if(FNR == 1) { print FILENAME };
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文