【发布时间】:2021-11-29 08:22:50
【问题描述】:
以下脚本将只运行 BEGIN 和 END 块:
#!/bin/awk -f
BEGIN {print "Hello, World!"}
{ print "Don't Panic" }
END { print "and we're panicking... I told you not to panic. Did you miss that part?" }
输出是:
$ awk -f joint.awk .
Hello, World!
and we're panicking... I told you not to panic. Did you miss that part?
预期的输出是:
$ awk -f joint.awk .
Hello, World!
Don't panic
and we're panicking... I told you not to panic. Did you miss that part?
奇怪的是,当我将中间块更改为print $1 时,不是打印一段文本,而是在我传入文件时按预期运行。
【问题讨论】:
-
标准输入上有数据吗?中间块只有在有数据时才会运行。
-
参见例如ideone.com/tggrLw -- 两行输入,你得到
Don't Panic打印两次。零行输入,它永远不会被打印出来。 -
awk -f joint.awk .会产生关于.是目录而不是文件的错误消息(或GNU awk 中的警告)。请务必阅读从运行工具中获得的任何警告或错误消息,并在发布问题时包含任何此类消息。在您使用-f传递给 awk 的文件中,任何存在的 shebang 都将被忽略,仅作为注释。如果你想编写一个调用 awk 的 shell 命令,那么 a) 不要用“.awk”扩展名来命名它,b) 不要用其中的 shebang 调用 awk,在 shebang 中使用一个 shell 并调用 awk从中,见stackoverflow.com/a/61002754/1745001。
标签: awk