对awk中变量赋值的基本理解

时间:2017-03-21 21:58:11

标签: bash awk variable-assignment

我对awk使用变量赋值的方式有了一个非常基本的争吵。为什么不打印我分配的变量new的输出 - 而是打印整个记录($0)。我确实看过GNU user's guide但未能理解这一非常基本的行为。感谢您的耐心等待!

echo "a b c" | awk '
{
print $NF #This prints c    
new=$NF
print $new #Why does this not print c 
}'

输出:

c
a b c

3 个答案:

答案 0 :(得分:3)

要了解差异,请使用此代码:

echo "a b c" | awk '
{
print $NF #This prints c    
new=NF
print $new #Why does this not print c 
}'

输出:它正确打印:

c
c

当您使用new=$NF代替new=NF时,您将最后一个字段的值分配到new。然后当您在$new语句中再次print时,awk会尝试将c转换为数字并获取0因此会打印整行。

答案 1 :(得分:0)

您可以更新要打印到print new的行;在awk中访问变量是C类型。

new=$NF与以下相同:
new=$3(NF的值评估为3)

现在变量new的值为第3列(c),您可以使用: print new

另外,根据 @anubhava 的回答,您可以将NF的值分配给new,并将其与$符号一起使用以打印第3栏。

答案 2 :(得分:0)

将$与字符串关联起来很诱人,因为有些语言使用此约定。此外,诸如bash之类的shell使用$来检索变量值。最令人困惑的是,shell和awk都使用$和一个数字来解析完整行中的字段。所以$ 1包含第一个字段,依此类推。但是awk中的变量没有其他地方使用美元符号。