2013-10-22 47 views
1

我有一個巨大的文件dat文件(以逗號分隔)。在這我要替換「foo」的第2列(用雙引號,如果第3列具有價值開始「AB(帶引號)在awk中用雙引號搜索字符串

這裏是input.dat

"5000","ABC","AB8989" 
"3000"," ","AB7676" 
"2000"," ","A07444" 
"4000"," ","BN0909" 

這是樣板我使用的命令:

awk -F, -vOFS=, '{if($3 ~/^"AB/){$2="foo"}print;}' input.dat 

此命令理想情況下應該只匹配第一個兩行,但我不知道爲什麼它還可選配3號線看起來是不是REG前一後法B 。請建議。

回答

0

這對我來說看起來很好(我縮短了一些),你在什麼系統上?

awk -F, -vOFS=, '$3 ~/^"AB/{$2="\"foo\""}1' input.dat 
"5000","foo","AB8989" 
"3000","foo","AB7676" 
"2000"," ","A07444" 
"4000"," ","BN0909" 

PS我加了雙引號"foo"

+0

我使用的HP-UNIX。如果我不必比較雙引號,那麼它與AB匹配。但是雙引號只有A被選中。 – Aarav

+0

我在腳本中意外地寫了^「AB *」正則表達式。^「AB工作正常。但是爲什麼^「AB *允許」A0? – Aarav

+0

'B *'確實意味着'0'或更多'B',所以它會匹配A,AB,ABB,ABBB等 – Jotne