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 中的变量在其他任何地方都没有使用美元符号。
我对 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 中的变量在其他任何地方都没有使用美元符号。