2016-02-16 43 views
0

讓我們想象一下有一些file.txt的這樣的數據:插入一些值到文件使用awk和sed

@@comp1,1111,1111,pass 
@@comp2,2222,2222,pass 
. 
. 
@@comp34,error,,,fail 
. 
. 
@@comp65,6565,6565,pass 

然後我要插入錯過值,在這裏,他們是:

expected=3434,observed=0000 

在「失敗」之前的適當領域。我也有$line_number它應該插入:

@@comp34,error,3434,0000,fail 

我試過不同的解決方案,但他們不工作。 例如: -

new1=`awk -n=$line_number -F, '{print $3}' text.txt` | sed 's/$new1/$expected' > text.txt 
new2=`awk -n=$line_number -F, '{print $4}' text.txt` | sed 's/$new2/$observed' > text.txt 
+0

你可以添加你預期的輸出? – anubhava

回答

2

你可以試試這個awk

awk -F, -vln="$line" -vexpe="$expected" -vobs="$observed" 'NR==ln{$3=expe;$4=obs}1' OFS=, file 

輸出將是:

@@comp1,1111,1111,pass 
@@comp2,2222,2222,pass 
. 
. 
@@comp34,error,3434,0000,fail 
. 
. 
@@comp65,6565,6565,pass 
+0

看起來像我誤解了這個問題,+1給你 – anubhava

+0

是否有任何可能性在插入該值後用新的改變重寫現有文件? – ascentman

+1

你可以這樣做:'awk'....'orig_file> tmp && mv tmp orig_file' – sat