カンマ(,
)で区切られた入力ファイルがあります )。二重引用符で囲まれたフィールドの中には、コンマが含まれているものがあります。これがサンプル行です
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 }
。