반응형
Windows에서 생성한 파일을 DB로 로딩하려고 할 때, 아래와 같은 에러가 발생했다.
'Invalid numeric format '0' for column 18'
파일을 열어봤을 때, 숫자형식인데, 위의 오류가 발생했고, 대부분 줄 마지막의 숫자 타입 데이터에 대한 오류였다.
원인이 발생한 이유는, DB로딩 구문에, 줄 바꿈 옵션을 \n (Linux)로 처리해서 이고, 로딩하려는 파일의 줄 바꿈 형식은 \r\n (Windows)이었다.
줄 바꿈 방식 CR, LF 란
- \r : CR (Carriage Return) 16진수 - 0d
- \n : LF (Line feed) 16진수 - 0a
OS별 줄 바꿈(개행문자)
- DOS(Windows) : \r\n **CR+LF방식
- UNIX 또는 Linux : \n **LF 방식
- Mac : \r
줄 바꿈(개행문자) 확인
1. (Windows) EditPlus(문서편집기) 사용 : 편집 > Hex 뷰어
예시) 간단하게 두줄 작성된 파일 text.txt
test1,0,0
test2,1,0
Hex 뷰어 확인 (첫 번째와 두 번째 줄 사이에 점 두 개가 - 줄 바꿈 문자 16진수 0D OA로 표현되어 있다. ** 리눅스 줄 바꿈 문자인 경우 0A)
2. (Linux) vi 편집기 확인
$ vi -b test.txt
** -b Binary mode
Vi 편집기를 바이너리 모드에서 열었을 때, 줄 끝에 '^M'이 있으면, 줄 바꿈이, Windows 형식인 '\r\n'으로 되어 있는 것으로 확인하면 된다. (Hex 뷰어로 확인한 16진수 = OD OA)
줄 바꿈(개행문자) Windows -> Linux 변경 (Linux에서 변경)
1. $ dos2unix 파일명.txt
#dos2unix가 설치 안되어 있으면 설치
$ yum install dos2unix
$ dos2unix test.txt
dos2unix: converting file test.txt to Unix format ...
2. Linux vi 편집기로 변환 처리
$ vi -b test.txt
$ vi -b text.txt
#^M은 Ctrl+v+m 으로 입력한다.
#모든 라인 끝에 ^M (=\r)을 없앤다.
:%s/^M//g
리눅스 서버가 존재하면 리눅스 서버에서 변환해도 되고,
윈도우 cmd에 리눅스 환경을 실행할 수 있는 wsl이 설치되어 있다면, wsl로 접속 후 동일하게 vi 편집기를 활용해도 된다.
반응형