特定のフィールドを除いてCSVからすべての二重引用符を削除する方法

特定のフィールドを除いてCSVからすべての二重引用符を削除する方法

csvからすべての二重引用符を削除したいのですが、4番目のフィールドは削除したくありません(この4つのフィールドはファイルパスを表すためです)。

これを達成する方法を提案してくださいsedまたはアッまたはパール1ライナーなど

今私が知っているのは、単純なsedコマンドを使用するだけです。

   sed s"/\"//g"  file.csv  | sed 's/ //g'

ただし、このコマンドはあまりエレガントで、4番目のフィールドでも機能します(4番目のフィールドは編集しないでください)。

注 - 文字を閉じるには、引用符間のスペースも削除する必要があります。

例(以前のcsvファイル)

"24  ","COsc   ","LINUX","/VP/Ame/AR/Celts/COf","  fbsutamante ",fbu2012,"kkk","&^#$@J  ",,,,,
25,COsc,LINUX,"/VP/Ame/AR/Celts/COf","fbsutamante ",fbu2012,"iiii ","   *****",,,,,

例(以降csvファイル)

24,COsc,LINUX,"/VP/Ame/AR HR/Ce   lts/COf",fbsutamante,fbu2012,kkk,&^#$@J,,,,,
25,COsc,LINUX,"/VP/Ame/AR HR/Ce   lts/COf",fbsutamante,fbu2012,iiii,*****,,,,,

答え1

これは1つの方法です。

awk 'BEGIN{FS=OFS=","}              # set input and output field separator as comma
     {for (i=5; i<=NF; i++) {       # loop from 5th field
            gsub("\"","", $i);      # remove "
            gsub(/^[ \t]+/,"", $i); # remove leading spaces
            gsub(/[ \t]+$/,"",$i)}  # remove trailing spaces
     }1' file

前後の削除はBMWの次の答えに基づいています。awk フィールドの先頭と末尾のスペースを削除する

テスト

$ awk 'BEGIN{FS=OFS=","} {for (i=5; i<=NF; i++) {gsub("\"","", $i); gsub(/^[ \t]+/,"", $i); gsub(/[ \t]+$/,"",$i)}}1' file
24,COsc,LINUX,"/VP/Ame/AR/Celts/COf",fbsutamante,fbu2012,kkk,&^#$@J,,,,,
25,COsc,LINUX,"/VP/Ame/AR/Celts/COf",fbsutamante,fbu2012,iiii,*****,,,,,

最初から3番目のフィールドまでクリーンアップする必要がある場合は、すべてのif (i!=4)フィールドを追加して繰り返します。

$ awk 'BEGIN{FS=OFS=","} {for (i=1; i<=NF; i++) {if (i!=4) {gsub("\"","", $i); gsub(/^[ \t]+/,"", $i); gsub(/[ \t]+$/,"",$i)}}}1' a
24,COsc,LINUX,"/VP/Ame/AR/Celts/COf",fbsutamante,fbu2012,kkk,&^#$@J,,,,,
25,COsc,LINUX,"/VP/Ame/AR/Celts/COf",fbsutamante,fbu2012,iiii,*****,,,,,

答え2

すべて削除してもう一度入れてください。

sed 's/"//g;s/,/,"/3;s/,/",/4'

関連情報