他のvarchar配列を切り捨てずにCSVでint配列列を切り捨てる

他のvarchar配列を切り捨てずにCSVでint配列列を切り捨てる

次のCSVがあります。

details.csv

1,2,3,4,5,2015-07-30 23:17:12,2015-07-30 23:39:12,103.4,104.2,1.2,"{1,2,3}",{NORMAL},1,2,
2,2,6,4,5,2015-07-30 12:17:12,2015-07-30 12:39:12,103.4,104.2,1.8,"{4,5,6,7,8,9}",{BOOKING},1,2,
3,2,3,4,9,2015-07-30 10:17:12,2015-07-30 10:39:12,103.4,104.2,1.9,"{1,9}","{NORMAL,BOOKING}",1,2,

ここで、列 15 は空で、列 12 は単一値の場合、引用符はありません({予約})と複数の値がある場合は引用符(「{予約、正常}」)。

ここでint配列で固定サイズのない11個の列を削除したいと思います。だから出力は次のようになります

mod_details.csv
1,2,3,4,5,2015-07-30 23:17:12,2015-07-30 23:39:12,103.4,104.2,1.2,{NORMAL},1,2,
2,2,6,4,5,2015-07-30 12:17:12,2015-07-30 12:39:12,103.4,104.2,1.8,{BOOKING},1,2,
3,2,3,4,9,2015-07-30 10:17:12,2015-07-30 10:39:12,103.4,104.2,1.9,"{NORMAL,BOOKING}",1,2,

だから私は次のことを試みます:

sed 's/,"{.*}"//' details.csv > mod_details.csv

しかし、問題は私が得た結果です

mod_details.csv
1,2,3,4,5,2015-07-30 23:17:12,2015-07-30 23:39:12,103.4,104.2,1.2,{NORMAL},1,2,
2,2,6,4,5,2015-07-30 12:17:12,2015-07-30 12:39:12,103.4,104.2,1.8,{BOOKING},1,2,
3,2,3,4,9,2015-07-30 10:17:12,2015-07-30 10:39:12,103.4,104.2,1.9,1,2,

また、引用符があるため、複数の値を持つ列の12値も削除されます。どんな助けでも大変感謝します。よろしくお願いします。

ベストアンサー1

実際には特に難しくありません。以下より具体的なパターンを使用する必要があります{.*}

sed 's/"{\([0-9],\)\+[0-9]}",//' details.csv

おすすめ記事