カンマ(,)で区切られた入力ファイルがあります )。二重引用符で囲まれたフィールドの中には、コンマが含まれているものがあります。これがサンプル行です
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ユーティリティをお願いしますか?
承認された回答:
引用符のバランスが取れている場合は、他のすべての引用符の間のコンマを削除する必要があります。これは、awkで表すことができます。 このように:
awk -F'"' -v OFS='' '{ for (i=2; i<=NF; i+=2) gsub(",", "", $i) } 1' infile
出力:
123,ABC DEV 23,345,534.202,NAME
説明
-F" awkが二重引用符で行を区切るようにします。これは、他のすべてのフィールドが引用符間のテキストになることを意味します。 forループはgsubを実行します 、グローバル置換の略で、他のすべてのフィールドで、コンマ("," )何もなし("" )。 1 最後に、デフォルトのコードブロックを呼び出します:{ print $0 } 。