awk 脚本不是 运行 中间块

awk script is not running the middle block

以下脚本只会 运行 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 ,而不是打印一段文本时,当我传入一个文件时,它 运行 符合预期。

在 stdin 上(或在您的输入文件中,如果明确命名的话),没有明确条件的内行得到 运行 一次。

因此,打印多少次Don't Panic取决于有多少输入。

查看通过以下代码测试的内容:

awkScript=$(cat <<'EOF'
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?" }
EOF
)
 
echo "Testing with no input:"
awk "$awkScript" </dev/null
echo
echo "Testing with one line of input:"
awk "$awkScript" <<<"One line of input"
echo
echo "Testing with two lines of input:"
awk "$awkScript" <<<$'First line\nSecond line'

...作为输出发出:

Testing with no input:
Hello, World!
and we're panicking... I told you not to panic.  Did you miss that part?

Testing with one line of input:
Hello, World!
Don't Panic
and we're panicking... I told you not to panic.  Did you miss that part?

Testing with two lines of input:
Hello, World!
Don't Panic
Don't Panic
and we're panicking... I told you not to panic.  Did you miss that part?