来自调用awk的shell脚本的意外空结果

时间:2014-08-23 18:17:54

标签: shell awk

下面是示例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"

有什么想法吗?

4 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

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

此外,建议使用以下命令替换:$(...)而不是反引号(`)。

所以在你的情况下:

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

答案 2 :(得分:1)

其他人已经解释了您的代码出了什么问题。我想建议另一种计算单词数量的方法:

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

或旧壳:

echo "$var" | wc -w

答案 3 :(得分:1)

这是一种方法(使用Here String)。 PS总是双引号变量,如"$var"

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