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