다음과 같은 CSV 파일이 있습니다.
1st,2nd,3rd,4th,5th,6th,7th
"first-line
",2,3,4,5,6,7
"second-line
",2,3,4,5,6,7
"third-line
",2,3,4,5,6,7
"normal-line",2,3,4,5,6,7
"forth-line
",2,3,4,5,6,7
"fifth-line
",2,3,4,5,6,7
첫 번째 열의 닫는 따옴표 앞에 개행 문자를 삽입하면 줄이 끊어진 것처럼 보입니다. 해당 개행 문자를 제거하고 싶습니다.
나는 다음의 솔루션을 사용했습니다.이 답변, 그러나 텍스트에 올바른 줄(예: 제목 및 "일반 줄")이 있으면 혼동이 발생합니다.
라인이 다운되지 않은 경우에도 이를 수행할 수 있는 방법이 있습니까?
답변1
새로운 답변(2022년 10월), 사용밀러첫 번째 열에서 후행 공백을 제거합니다.
$ mlr --csv put '$["1st"] = rstrip($["1st"])' file
1st,2nd,3rd,4th,5th,6th,7th
first-line,2,3,4,5,6,7
second-line,2,3,4,5,6,7
third-line,2,3,4,5,6,7
normal-line,2,3,4,5,6,7
forth-line,2,3,4,5,6,7
fifth-line,2,3,4,5,6,7
원래 인용문을 유지하세요.
$ mlr --csv --quote-original put '$["1st"] = rstrip($["1st"])' file
1st,2nd,3rd,4th,5th,6th,7th
"first-line",2,3,4,5,6,7
"second-line",2,3,4,5,6,7
"third-line",2,3,4,5,6,7
"normal-line",2,3,4,5,6,7
"forth-line",2,3,4,5,6,7
"fifth-line",2,3,4,5,6,7
위치가 아닌 이름으로 열을 사용한다는 점에 유의하세요.
이전 답변(2022년 6월):
데이터에 해당 문자가 포함되어 있지 않고 @
(그렇지 않은 경우 사용되지 않은 다른 문자로 변경) 포함된 줄 바꿈을 모두 제거하려고 한다고 가정합니다.
$ csvformat -M @ file.csv | tr -d '\n' | tr '@' '\n'
1st,2nd,3rd,4th,5th,6th,7th
first-line,2,3,4,5,6,7
second-line,2,3,4,5,6,7
third-line,2,3,4,5,6,7
normal-line,2,3,4,5,6,7
forth-line,2,3,4,5,6,7
fifth-line,2,3,4,5,6,7
이는 다음을 사용합니다.csvformat
csvkit에서@
줄 바꿈 문자 대신 레코드 종결자로 사용되는 데이터 스트림으로 CSV 파일의 형식을 다시 지정합니다 . 변환된 데이터에 여전히 존재하는 줄 바꿈은 tr
후속 명령에 의해 제거됩니다.
그런 다음 두 번째 호출을 통해 임시 레코드 종결자를 개행 문자로 다시 변경합니다 tr
.
인용이 필요한 필드는 출력에서 계속 인용됩니다.
답변2
이는 인용된 텍스트에 6개의 쉼표가 포함되어 있지 않다고 가정합니다.
awk -F, '
NR == 1 {num_fields = NF}
NF < num_fields {first=$0; getline; $0 = first FS $0}
{print}
' file
더 짧은 Perl: 전체 파일을 삭제하고 따옴표 앞에 개행 문자를 제거합니다.
perl -0777 -pe 's/\n(?=",)//g' file
답변3
이것을 시도해 보세요 awk
- 방법:
awk '{while (gsub("\"","&")%2) {getline T; $0 = $0 T}} 1' file
1st,2nd,3rd,4th,5th,6th,7th
"first-line",2,3,4,5,6,7
"second-line",2,3,4,5,6,7
"third-line",2,3,4,5,6,7
"normal-line",2,3,4,5,6,7
"forth-line",2,3,4,5,6,7
"fifth-line",2,3,4,5,6,7
큰따옴표 문자 수가 짝수에 도달할 때까지 다음 줄을 계속 추가합니다.
답변4
사용밀러정말 간단하다
mlr --csv clean-whitespace input.csv
가지다
1st,2nd,3rd,4th,5th,6th,7th
first-line,2,3,4,5,6,7
second-line,2,3,4,5,6,7
third-line,2,3,4,5,6,7
normal-line,2,3,4,5,6,7
forth-line,2,3,4,5,6,7
fifth-line,2,3,4,5,6,7