调用awk的shell脚本产生意外的空结果



下面是示例shell脚本,这里NF的值是Null而不是9(第4行表达式的输出)

#!/bin/bash
#set -x
VAR="The quick brown fox jumped over the lazy dog."
NF=`echo $VAR | awk '{PRINT NF}'`
echo "$NF"

任何想法吗?

AWK区分大小写。您想要函数print

通过写PRINT NF代替,AWK将其解释为两个连接的变量的名称。PRINT为空值;NF的值为"9"。您没有要求它对结果执行任何操作(例如打印它),因此AWK脚本不会为这行输入生成输出。

您要查找的命令是print,而不是PRINT。Awk是区分大小写的。

同时,建议使用以下命令替换:$(...)代替反引号(`)。

所以在你的例子中:

NF=$(echo $VAR | awk '{print NF}')

其他人已经解释了您的代码的错误。我想建议另一种计算单词数的方法:

var="The quick brown fox jumped over the lazy dog."
wc -w <<<"$var"

或者在旧的shell上:

echo "$var" | wc -w

这里有一种方法(使用Here字符串)。总是像这样双引号引用变量"$var"

NF=$(awk '{print NF}' <<< "$var")

最新更新