여러 줄의 값과 캐리지 리턴으로 CSV를 구문 분석합니다.

여러 줄의 값과 캐리지 리턴으로 CSV를 구문 분석합니다.

CSV 파일이 있는데 sed다음 한 줄의 코드를 사용하여 큰따옴표 값을 제거하려고 합니다. 이에 대한 자세한 내용은 내에서 확인할 수 있습니다.그것을 알아 내기위한 원본 게시물

sed -i.bak 's/^"//g;s/","/,/g;s/"$//g' $1 

지금은 이것이 대부분 작동하지만 내 내보내기 중 하나에 문제가 있습니다. 여러 줄이 있고 캐리지 리턴으로 분리된 것 같습니다. 이것은 데이터의 증거 샘플입니다

$ cat -v Quote.csv

"Id","Blob","Employee","Etc"^M
"0Q01N000001MxPbSAK","Job to happen late day/ evening", "Employee 1", "more stuff"^M
"0Q01N000001N4klSAC","Daytime work during normal businesses hours ^M
some details ^M
some more details ^M
conclusion","Employee 2", "more stuff"%

전체 파일에 대해 이 작업을 수행하려고 하면 다음 오류가 발생합니다.

CSV error: record 2 (line: 4, byte: 101): found record with 2 fields, but the previous record has 4 fields

나는 이것이 Excel에서 "괜찮아 보이지만" 열과 행 정렬이 왜곡되었기 때문이라고 생각합니다.

이 문제를 해결할 수 있도록 이것을 올바르게 구문 분석하는 방법에 대한 아이디어가 있습니까? CSV를 ArangoDB로 가져올 때 값을 올바르게 입력할 수 있도록 큰따옴표를 제거해야 합니다.

다른 포럼 찾기본질적으로 동일한 문제이며 제안된 솔루션입니다.

sed 's/$/~/' Quote.csv |tr '\n' ' '   |sed 's/~ "KEY-/\n"KEY-/g'

내 도메인에 맞게 리버스 엔지니어링할 수 있다면 ID아마도 효과가 있을 것이라고 믿습니다. 또한 문자가 있다는 것을 알았는데 문자도 제거해야 <br>하는지 잘 모르겠습니다. tr(예상된 줄 바꿈이 나타나면 데이터가 엉망이 될 것 같습니다.)

답변1

출력의 실제 문제는 \r\n 두 개의 레코드 끝과 셀 내부에 캐리지 리턴 문자가 있다는 것입니다.

대신 올바른 CSV는 다음과 같습니다.

여기에 이미지 설명을 입력하세요.

위와 비슷한 결과가 나오도록 출력을 생성하는 과정을 수정하고 이를 Miller 예제에서 사용하면http://johnkerl.org/miller/doc그리고 sed

tail -n +2 input.csv | \ mlr --implicit-csv-header --rs '\r\n' --icsvlite --ocsv put '$2=gsub($2,"\n"," ")' then label Id,Blob,Employee,Etc | \ sed 's/"//g'

당신은 출력을 얻을 것이다

Id,Blob,Employee,Etc 0Q01N000001MxPbSAK,Job to happen late day/ evening,Employee 1,more stuff 0Q01N000001N4klSAC,Daytime work during ... details conclusion,Employee 2, more stuff

관련 정보