我想用值-9覆盖文件最后一行的最后一个字段(总共2个字段)。我正在使用这个命令:
awk 'END{$2=-9}1' file.txt > new_file.txt
但它似乎不起作用(没有替换)。为什么?有什么想法吗?
谢谢!
答案 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解决方案。