カンマで区切られたファイルから、引用符内に含まれるカンマのみを削除します。

カンマで区切られたファイルから、引用符内に含まれるカンマのみを削除します。

カンマ()で区切られた入力ファイルがあります,。一部のフィールドはカンマで二重引用符で囲まれています。サンプルラインです

123,"ABC, DEV 23",345,534.202,NAME

二重引用符だけでなく、二重引用符内のすべてのカンマを削除する必要があります。したがって、上記の行は次のように解析する必要があります。

123,ABC DEV 23,345,534.202,NAME

次の使用法を試しましたが、sed期待した結果が得られませんでした。

sed -e 's/\(".*\),\(".*\)/\1 \2/g'

sedそれとも、awk他のUNIXユーティリティに関するクイックヒントはありますか?

ベストアンサー1

awk引用文のバランスが取れたら、次のように表すことができる引用符の間のカンマを削除する必要があります。

awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i) } 1' infile

出力:

123,ABC DEV 23,345,534.202,NAME

説明する

二重引用符でフィールド分割を実行するようにawkに指示します-F"。これは、他のすべてのフィールドが引用符で囲まれたテキストであることを意味します。 forループはgsub他のすべてのフィールドで動作します。グローバル置換の省略形として、","カンマ()を空("")に置き換えます。最後に、1基本コードブロックを呼び出します{ print $0 }

おすすめ記事