awk脚本没有运行中间块

  • 本文关键字:中间 运行 脚本 awk awk
  • 更新时间 :
  • 英文 :


下面的脚本将只运行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时,不是打印一段文本,而是在传入文件时按预期运行。

对于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 linenSecond 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?

最新更新