テキスト処理 - 各行の最初と最後の2番目を置き換えます。

テキスト処理 - 各行の最初と最後の2番目を置き換えます。

私のCSVファイルに問題があるため、引用符を追加する必要があります。

存在する

field,field2,text field with potential commas,field4,field5
field,field2,text fie,ld with pot,ential commas,field4,field5
field,field2,text field with, potential commas,field4,field5

出る

field,field2,"text field with potential commas",field4,field5
field,field2,"text fie,ld with pot,ential commas",field4,field5
field,field2,"text field with, potential commas",field4,field5

sed 's/,/,"/2'最初の引用符を追加します。しかし、最後から後ろに各行の2番目の項目に対して同じことをどのように実行しますか?

sed、awk、Perl、その他の方法の使用を歓迎します。ファイルには数百万行があり、高速です。

ベストアンサー1

1つのアプローチは次のとおりですawk。 5つ以上のカンマ区切りフィールドがある場合は、それを連結する「中間」フィールドを繰り返してから、引用符で囲まれた新しいフィールドを印刷し、最後の2つのフィールドを印刷します。

awk -f awkscript.awk < input

次のようにawkscript.awk:

BEGIN {
  OFS=","
  FS=","
}
{
        if (NF > 5) {
                middle=""
                for(i=3; i <= NF-2; i++)
                        middle=(middle ? middle"," : "")$i
                print $1, $2, "\""middle"\"", $(NF-1), $NF
        } else {
                print $1, $2, "\""$3"\"", $4, $5
        }
}

おすすめ記事