как удалить все двойные кавычки из csv кроме определенного поля

От того, что я прочитал канонический способ получить Linux, чтобы запустить на 80286, чтобы запустить его внутри виртуальной машины. Это то, что здесь сделала Фабрис Беллард . Вам придется реализовать виртуальную машину самостоятельно или портировать один.

0
29.07.2014, 13:22
2 ответа

Это может быть способ:

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.

Test

$ 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,*****,,,,,

Если также необходимо очистить от 1-го до 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,*****,,,,,
4
28.01.2020, 02:20

Просто уберите их все и положите обратно:

sed 's/"//g;s/,/,"/3;s/,/",/4'
0
28.01.2020, 02:20

Теги

Похожие вопросы