Unix Shell CRLF는 공백으로 대체됩니다.

Unix Shell CRLF는 공백으로 대체됩니다.

Oracle SQL Loader에 다음 입력을 사용하고 있습니다. 이제 서비스에서 다운로드한 CSV 파일에 CRLF가 있습니다.

나는 전에 시도했다

dos2unix 
tr '\n' ',' < input.txt > output.txt
awk '{printf "%s\r\n", $0}' file

하지만 행운은 없습니다.

견본:

"ID","NAME","GROUP","Free Text [CR][LF]
[CR][LF]
[CR][LF]
[CR][LF]
"
"ID1","NAME1","GROUP1","Free Text1 [CR][LF]
"

원하는 출력:

"ID","NAME","GROUP","Free Text"
"ID1","NAME1","GROUP1","Free Text1"

도움이 되는 코드나 명령어를 제안해주세요

미리 감사드립니다

답변1

$ perl -pe 'while(m/\r$/) { $_ .= readline }; s/\r\n//g' rgram.txt
"ID","NAME","GROUP","Free Text"
"ID1","NAME1","GROUP1","Free Text1"

\r$이는 CRLF (또는 )로 끝나는 연속 행을 \r\n하나의 긴 행으로 연결한 다음 행에서 모든 CRLF 쌍을 제거하고 인쇄합니다.

수정된 입력은 stdout으로 인쇄되며, 출력은 다른 파일로 리디렉션될 수 있습니다. 또는 해당 옵션을 사용하여 perl원본 -i파일을 수정합니다.

$ perl -i.bak -pe 'while(m/\r$/) { $_ .= readline }; s/\r\n//g' rgram.txt

이것은 그대로 유지됩니다 rgram.txt.bak.

나는 을 사용하는 것을 좋아하지 않습니다 -i. 표준 출력을 예를 들어 로 리디렉션하고 싶습니다 rgram.new. 표준 출력에 쓰는 것이 더 다양하며(다른 프로그램에 파이프할 수 있거나 프로세스 또는 명령 대체 등에 사용할 수 있음) 버그로 인해 원본 파일이 손상될 위험이 적습니다.


rgram.txt질문에 설명된 샘플 데이터가 포함된 텍스트 파일입니다.

$ sed -n l rgram.txt 
"ID","NAME","GROUP","Free Text\r$
\r$
\r$
\r$
"$
"ID1","NAME1","GROUP1","Free Text1\r$
"$

답변2

sed 's/"$//' rgram.csv | sed 's/$/"/' | sed '/^"$/d' > rgram.new.csv

먼저 파일에서 마지막 " 문자를 제거한 다음 다시 추가한 다음 "로 시작하는 줄을 제거했습니다.

답변3

CRLF 시퀀스를 제거하고 싶지만 선행 CR 없이 LF만 유지하려는 경우가 있으므로 다음과 같이 하십시오.

perl -pe 's/\r\n//' < input.txt > output.txt

또는:

gawk -v RS='\r\n' -v ORS= 1 < input.txt > output.txt

관련 정보