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'