我想用值-9覆盖文件最后一行的最后一个字段(总共2个字段)。我正在使用这个命令:使用awk覆盖最后一行中的最后一个字段
awk 'END{$2=-9}1' file.txt > new_file.txt
但它似乎没有工作(没有替换完成)。为什么?有任何想法吗?
谢谢!
我想用值-9覆盖文件最后一行的最后一个字段(总共2个字段)。我正在使用这个命令:使用awk覆盖最后一行中的最后一个字段
awk 'END{$2=-9}1' file.txt > new_file.txt
但它似乎没有工作(没有替换完成)。为什么?有任何想法吗?
谢谢!
节末时后执行处理最后一行,以便在最后一行打印完成后分配$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}
'
谢谢,它工作! – Yorgos
使用tac
+ awk
另一种方式:
tac file.txt|awk 'NR==1{$NF="-9";}1'|tac >new_file.txt
PS:我更喜欢@glenn解决方案。
END块条件在最后一个输入文件的最后一行之后进行处理。在END块中$ 0,$ 1,$ 2,...为空,您可以通过打印$ 0或$ 1,$ 2来测试它。 –
如果你的文件很大并且未压缩,那么你应该考虑unix工具['dd'](http://en.wikipedia.org/wiki/Dd_%28Unix%29)。 –