2015-04-22 57 views
3

我想用值-9覆蓋文件最後一行的最後一個字段(總共2個字段)。我正在使用這個命令:使用awk覆蓋最後一行中的最後一個字段

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

但它似乎沒有工作(沒有替換完成)。爲什麼?有任何想法嗎?

謝謝!

+0

END塊條件在最後一個輸入文件的最後一行之後進行處理。在END塊中$ 0,$ 1,$ 2,...爲空,您可以通過打印$ 0或$ 1,$ 2來測試它。 –

+0

如果你的文件很大並且未壓縮,那麼你應該考慮unix工具['dd'](http://en.wikipedia.org/wiki/Dd_%28Unix%29)。 –

回答

4

你需要打印以前行,然後你可以操縱在END塊中的最後已經付印前:

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

你忘了''file'' xP – klashxx

+0

Ed的答案完全相同!謝謝!!! – Yorgos

3

節末時後執行處理最後一行,以便在最後一行打印完成後分配$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} 
' 
+1

謝謝,它工作! – Yorgos

2

使用tac + awk另一種方式:

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

PS:我更喜歡@glenn解決方案。

相關問題