요청이 있습니다.
내 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