awk中变量赋值的基本理解

basic understanding of variable assignment in awk

我对 awk 使用变量赋值的方式的理解有一个非常基本的争论。在下面,我分配的变量 new 的输出是如何不打印的——而是打印了整个记录 ([=13=])。我确实看过 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

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

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。然后当你在 print 语句中再次执行 $new 然后 awk 尝试将 c 转换为数字并得到 0 因此它打印整行。

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

new=$NF 等同于:
new=(NF的值被评估为3)

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

否则,根据 @anubhava 的回答,您可以将 NF 的值分配给 new 并将其与 $ 符号打印第 3 列。

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