使用awk覆盖最后一行中的最后一个字段

时间:2015-04-22 16:13:59

标签: awk

我想用值-9覆盖文件最后一行的最后一个字段(总共2个字段)。我正在使用这个命令:

awk 'END{$2=-9}1' file.txt > new_file.txt

但它似乎不起作用(没有替换)。为什么?有什么想法吗?

谢谢!

3 个答案:

答案 0 :(得分:4)

您需要打印之前的行,然后您可以在END块中操作 last 行,然后才能打印出来:

awk 'NR > 1 {print prev} {prev = $0} END {$2=-9; print}'

答案 1 :(得分:3)

在处理最后一行后执行END部分,以便在打印完最后一行之后为$2分配一个值。

还不能保证$ 2或$ 0或任何字段将保留在END部分(POSIX没有指定它)但是你的awk,$ 2等中的IF保留了然后是什么你需要的是:

awk '
NR>1{print prev}
{prev=$0}
END {$2=-9; print}
'

如果他们不是,那么你需要先创建$ 0:

awk '
NR>1{print prev}
{prev=$0}
END {$0=prev; $2=-9; print}
'

答案 2 :(得分:2)

使用tac + awk的另一种方式:

tac file.txt|awk 'NR==1{$NF="-9";}1'|tac >new_file.txt

PS :我更喜欢@glenn解决方案。