2012-12-27 49 views
5

我有一個文本文件是這樣的:AWK:找到,並在某些領域取代僅

$ cat test 
12 13 2100 s 
12 13 3100 s 
100 13 100 s 
12 13 300 s 

我所要的輸出是這樣的:

$ cat test 
12 13 22000 s 
12 13 32000 s 
100 13 2000 s 
12 13 300 s 

我只想要替換100在字段3(一次100包含在$3中)轉換爲2000。我如何使用awk完成這項工作?

回答

8

下面是使用awk一個辦法:

awk '{ sub(/100$/, "2000", $3) }1' file 

結果:

12 13 22000 s 
12 13 32000 s 
100 13 2000 s 
12 13 300 s 
+0

我怎麼能代替一切,是不是100,可以說5000 ? – discipulus

+1

@lovedynasty:你可以嘗試這樣的:'awk'{sub(/ [^ 1] * [^ 0] * [^ 0] * /,「5000」,$ 3)} 1'file'。但這可能無法爲您提供預期的結果。通常,當我想執行某種反向模式匹配時,我想使用某種[look-around assertion](http://www.regular-expressions.info/lookaround.html)。不幸的是,'awk'不支持這些,我需要使用更強大的工具。我會在'自動分割'模式中使用'perl'。 HTH。 – Steve

1
awk '$3~/100/{gsub(/100/,"2000",$3)}1' your_file 
+0

對不起,我沒有正確描述問題,我已更新我的問題。 –

+0

我可以用5000來替換所有不是100的東西嗎? – discipulus

1

嘗試:

awk '{$3=gensub(100,2000,1,$3);print}' test.txt