묶는 따옴표 외에도 문자열 사이에 큰따옴표가 있습니다.

묶는 따옴표 외에도 문자열 사이에 큰따옴표가 있습니다.

요청이 있습니다.

내 CSV 파일에 문자열이 있고 따옴표를 제거하지 않고 "Testurteil "sehr gut""파일을 로드해야 합니다 .redis또는나는 이것을 원합니다: Testurteil "sehr gut"닫는 따옴표가 있어도 상관 없습니다.

답변1

노력하다:

perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
  s@(^"|"$|\\.)|"@$1||"\\\""@ge;$r/ge' file.csv

경험적 방법을 사용하여 문자를 둘러싸지 않는 큰따옴표 문자를 식별하고 백슬래시로 이스케이프 처리합니다.

예를 들어 다음과 같이 변경됩니다.

 "asd","","a,b"c,d"e,f",""",,blah

도착하다:

 "asd","","a,b\"c,d\"e,f","\"",,blah

(원본은 그대로 두세요 file.csv.back)

이스케이프 대신 작은따옴표로 변경하려면 다음을 수행하세요.

perl -pi.back -le 's/"(?:[^"]|"(?=[^,]))*"|[^",]*/($r=$&)=~
  s@(^"|"$|\\.)|"@$1||"'\''"@ge;$r/ge' file.csv

답변2

어쩌면 이런 게 있지 않을까요?

cat test.csv
17,"abc","Testurteil "sehr gut"","08/15"
99,"xyz","Testurteil "vernichtend"","4711"

모든 행의 모든 ​​필드를 인쇄합니다(검증용으로만).

awk -F, '{print $0}' test.csv
17,"abc","Testurteil "sehr gut"","08/15"
99,"xyz","Testurteil "vernichtend"","4711"

awk 명령줄 옵션 "-F"를 사용하면 표준 공백과 다른 필드 구분 기호를 설정할 수 있습니다.

"특수 필드"만 인쇄합니다. 즉, 모든 행에 대해 필드 번호 3을 인쇄합니다.

awk -F, '{print $3}' test.csv
"Testurteil "sehr gut""
"Testurteil "vernichtend""

더 나은 가독성을 위한 몇 가지 설명이 있을 수 있습니다(또는 키:값 저장소로 내보내기).

awk -F, '{print "Line" FNR ":field3 " $3}' test.csv 
Line1:field3 "Testurteil "sehr gut""
Line2:field3 "Testurteil "vernichtend""

CSV 파일을 사용하는 추가 필드:

awk -F, '{print "Line number " FNR ": " $3 " for product "$1}' test.csv
Line number 1: "Testurteil "sehr gut"" for product 17
Line number 2: "Testurteil "vernichtend"" for product 99

관련 정보