2016-09-20 7 views
0

awkが指定されたパターンをマッチした場合に変更するか、元の行を返そうとしています。ここでは、[1]が一致するときメートルで「」私のコードは、私は `試合はメートルで一致したパターンを返すことを期待パターンが一致するかどうかのawk条件

printf 'hello,"hru, bro"\nhi,bye\n' | gawk 'match($0, /"([^"]+)"/, m) {if (m[1] == "") {print $0} else {print gsub(/,/,"",m[1])}}' 

-> 1 

だ[1]と、すべてを置換するGSUB。結果は

-> hello,hru bro\nhi,bye 

ここでは何が分かりますか?

UPDATE

トムのコメントによると、私はgensubgsubを置き換える、まだ私は今、次の結果を取得:

-> gawk: cmd. line:1: (FILENAME=- FNR=1) warning: gensub: third argument `hru, bro' treated as 1 
hello"hru, bro" 
+0

ありがとう、私はドキュメントをチェックし、代わりに 'gensub'を使うべきでした。だから、私はその愚か者としての質問を削除します。 – user3639782

+0

実際には問題は解決しません。私はそれに応じて自分の投稿を更新しました。 – user3639782

+0

警告メッセージがあなたに伝えているようにgensub()に間違った引数を渡していますが、そのコードを表示していないので、それ以上のことは分かりません。 –

答えて

1

gsubは第三引数に変異すると作られた置換の数を返します - 中この場合、1

が、私はこのような何かにあなたのコードを変更することをお勧め:

awk 'match($0, /([^"]*")([^"]+)(".*)/, m) { 
    $0 = m[1] gensub(/,/, "", "g", m[2]) m[3] 
} 1' 

ラインに引用符で囲まれたものがある場合、中央のキャプチャグループからカンマを削除するgensubを使用して、それを再構築し(つまり、二重引用符の間の部分)。 gensub第三は、("g"グローバルを意味する)行うことが置換の数を指定するために使用される4つの引数を取ること

注意。

関連する問題