当在
我发现
END
块中使用 $1
、$2
等时会发生什么,例如:awk '{print $3}END{print $1 $2}'
我发现
$1
和$2
保留了上一条记录的值。这种行为是由标准保证的还是实现特定的?根据文档,我们可以看到这是实现特定的:
传统上,由于实现问题,$0和NF在END规则内部未定义。 POSIX标准指定NF在END规则中可用。它包含来自最后一个输入记录的字段数。由于疏忽,该标准并未说明$0也被保留,尽管从逻辑上讲,它应该被保留。事实上,BWK awk、mawk和gawk都保留了$0的值以供在END规则中使用。但要注意,并非所有的其他实现和许多旧版本的Unix awk都不保留。
END
部分中不会保留$0
等。我期望的是,对于OPs脚本的解决方法,我希望有HP-UX的人来测试,即awk '{print $3; last=$0} END{$0=last; print $1, $2}'
。 - Ed Morton$0
是否也会在END
中被构建。在我的GNU awk中,它确实会这样做:awk 'END {$0="a b c"; print $1}' file
,但我不知道这是否发生在所有awk版本中。 - fedorqui$0
保留到 END
部分。 - Ed Morton
END
块中字段变量是否会被清除。 - chepnerNR
)被指定为具有最后处理记录的值,因此将其扩展到字段变量也并非荒谬。 - Eric Renouf