2017-02-25 480 views
2

我有一個文本文件,其中包含以下幾行:使用sed或awk替換另一個字段的字段

100 200 300 
50 120 200 
60 500 340 

我正在編寫一個腳本,以根據用戶輸入更改任何字段的值。如果用戶在bash中給出列號($ colno)和行號($ rowno),我使用下面的代碼來確定要替換的確切字段。

awk -v i=$colno -v j=$rowno 'NR ==j {print $i}' file 

因此,如果用戶將$ colno作爲1並將$ rownno作爲3,我可以在第3行(60)中找到字段$ 1。

現在我想永久替換這個值(60)與其他用戶給定的值($ new_val)。

如何使用sed或awk執行此操作?這段代碼將允許我用用戶指定的新值更改用戶指定的任何字段。該代碼不應該更改任何其他字段,即使具有相同的值。

請幫幫我。提前感謝你。

+1

awk將無法編輯文件和sed需要-i選項。 – grail

+0

「永久替換」是指用'awk'還是'sed'寫文件? – Zlemini

+0

如果就地編輯是您需要的,我建議您在其他地方備份文件。如果用戶有'$ colno'或'$ rowno'錯字,那麼它不是無足輕重的。 – Zlemini

回答

6

只是所需的值替換列,

colno=1 
rowno=3 

awk -v i=$colno -v j=$rowno -v newvalue=20 'NR ==j {$i=newvalue}1' file 
100 200 300 
50 120 200 
20 500 340 

的一部分,{$i=newvalue}1$1,即值從當前例如第3行1列到newvalue設置的值。 {}1根據個別重置來重構每一行。

+0

工作完美! – Ashok

+0

@Ashok:如果有幫助,請接受答案! – Inian

3

隨着GNU的sed,在線$rowno$newtext值來代替非空格字符$colno次出現:單獨

sed -E "${rowno}s/[^ ]*(*)/${newtext}\1/${colno}" file  
相關問題