특정 필드를 제외하고 CSV에서 모든 큰따옴표를 제거하는 방법

특정 필드를 제외하고 CSV에서 모든 큰따옴표를 제거하는 방법

csv에서 모든 큰따옴표를 제거하고 싶지만 네 번째 필드는 제거하고 싶지 않습니다(이 네 필드는 파일 경로를 나타내기 때문입니다).

이것을 달성하는 방법을 제안하십시오sed또는또는펄 1 라이너,등

지금 내가 아는 것은 간단한 sed 명령을 사용하는 것뿐입니다.

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

하지만 이 명령은 덜 우아하고 네 번째 필드에서도 작동합니다(네 번째 필드는 편집하면 안 됩니다).

참고 - 문자를 닫으려면 따옴표 사이의 공백도 제거해야 합니다.

예시(이전 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

이는 한 가지 방법일 수 있습니다.

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

첫 번째부터 세 번째 필드까지 정리해야 하는 경우 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'

관련 정보