다음 awk
명령 목표는 CSV 파일과 구분 기호 사이의 단일 단어에서만 공백과 불필요한 따옴표를 제거하는 것입니다.
awk 'gsub(/("[ ]+|[ ]+")/,"\""){$0=gensub(/"([[:alnum:]]+)"/,"\\1","g")}1' file.csv
예: (이전)
1,"1.0348 54 35.5",""45356",""4"""""35,"578 "
예: (이후)
1,"1.0348 54 35.5","45356,"4""""35,578
문제는 awk
문자가 영숫자가 아닌 경우 처리할 수 없다는 것입니다.
예
1," jde7@&^% "," &^!@ ",)(*&^," (*^%%^&*( "
내 목표는 영숫자가 아닌 모든 유형의 문자와 영숫자 문자를 처리하는 것입니다.
~처럼
( A-Z , !@#$%^&&**( , 1-9 , etc )
교체해야 할 것 같아요[[:번호:]]다른 구문을 사용합니다.
awk
모든 유형의 문자를 지원하려면 구문에서 무엇을 변경해야 합니까?
답변1
문자 [[:alnum:]]
클래스는 알파벳과 숫자를 나타내며 다음을 사용할 수 있습니다.
[^[:alnum:]]
영숫자가 아닌 경우 목표는 다음과 같습니다.
내 목표는 영숫자가 아닌 모든 유형의 문자와 영숫자 문자를 처리하는 것입니다.
이 표현을 사용할 수 있습니다.[[:alnum:]] | [^[:alnum:]]
따라서 awk 명령은 다음과 같습니다.
awk 'gsub(/("[ ]+|[ ]+")/,"\""){$0=gensub(/"(([[:alnum:]]|[^[:alnum:]])+)"/,"\\1","g")}1' file.csv