1

私は巨大なファイルdatファイル(カンマ区切り)を持っています。2番目の列を「foo」に置き換える必要があります(3番目の列に「AB(引用符付き)」で始まる値がある場合は二重引用符付き)

これがサンプルinput.datです

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

これは私が使用しているコマンドです:

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

このコマンドは、理想的には最初の 2 行のみに一致するはずですが、なぜ 3 行目にも一致するのかわかりません。正規表現で A の後に B を読み取っていないようです。提案してください。

4

1 に答える 1

1

これは私には問題ないようです (一部短縮しました)。どのシステムを使用していますか?

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

PS私は二重引用符を追加しました"foo"

于 2013-10-22T05:21:12.293 に答える