awk + gsub + 다양한 문자 사용법

awk + gsub + 다양한 문자 사용법

다음 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

관련 정보