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