我想用值-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)。 –