編者按:
這個問題有一個陷入困境的編輯歷史善意的,但誤導編輯(其中引進無關,「漂亮」格式依託在空格和|
字符分隔列)暫時混淆了這個問題(自恢復)。
OP的前提是輸入是選項卡 -delimited,即使這並不直接反映在此處顯示的示例輸入中。 如何在沒有在AWK不失格式替換整列
我有一個輸入文件有6列,它們是製表符分隔的。我想用值'81115'
替換第5列中的所有值,同時保持格式不變。
輸入文件:
203 ADD 24 IAC 81216 IT
204 ATT 24 IAC 81216 IT
所需的輸出文件:
203 ADD 24 IAC 81115 IT
204 ATT 24 IAC 81115 IT
我的解決方案#1
我使用下面的命令:
awk '{$5 = v} 1' v="81115" file > file.NEW
使用上述命令,第5列正在被替換,但列不再以製表符分隔。
輸出文件:
203 ADD 24 IAC 81115 IT
204 ATT 24 IAC 81115 IT
我的解決方案#2
爲了保持我曾嘗試使用下面的命令試圖格式化:
awk -v replace="81115" -F '\t' -v OFS='\t' {$5=replace}1' file > file.NEW
OR
awk -F"\t" -v OFS="\t" '{$5=81115}1' file > file.NEW
OR
awk -F '\t' '{$5="81115";}1' OFS='\t' file > file.NEW
以上所有的命令都保持格式不變,但與在端值81115
添加新柱;即列7被追加。
輸出文件:
203 ADD 24 IAC 81216 IT 81115
204 ATT 24 IAC 81216 IT 81115
任何人都可以提出一個替代的解決方案或改變上述命令?
嘗試:'awk -v new =「81115」'BEGIN {OFS = FS =「\ t」} {$ 5 = new} 1'file' – sat
您所有的解決方案#2版本都可以在這裏使用。解決方案#1也可以,只需添加'-v OFS =「\ t」'。我使用MAWK和GAWK進行了測試。測試你的輸入文件是否真的是製表符分隔的。 –
alternate ..'perl -pe's/^(\ S + \ s +){4} \ K \ S +/81115 /'file> file.NEW' ..或者如果第五列始終是'81216'且在文件,爲什麼不是一個簡單的'sed's/81216/81115 /'file> file.NEW' – Sundeep