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"

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

수정된 입력은 stdout으로 인쇄되며, 이는 다른 파일로 리디렉션될 수 있습니다. 또는 원본 파일을 그 자리에서 수정하려면 perl'의 옵션을 사용하세요.-i

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

이렇게 하면 원본이 rgram.txt.bak.

나는 을 사용하는 팬이 아닙니다 -i. 오히려 stdout을 rgram.new. stdout에 쓰는 것이 더 다양하며(다른 프로그램으로 파이프하거나 프로세스 또는 명령 대체 등에 사용할 수 있음) 원본 파일을 폐기하는 실수가 발생할 위험이 적습니다.


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

관련 정보