![.csv 파일에서 0d 캐리지 리턴 삭제](https://rvso.com/image/109230/.csv%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%200d%20%EC%BA%90%EB%A6%AC%EC%A7%80%20%EB%A6%AC%ED%84%B4%20%EC%82%AD%EC%A0%9C.png)
스크립트 작업 중에 이 문제가 발생했습니다. 대부분의 경우 스크립트를 실행할 때 다음과 같은 출력 파일이 표시됩니다.
device_id,ip_address,serial_number
SEP0c1167231746, 148.000.000.32
SEP0c1167223fa5, 148.000.000.30
SEP0c1167224170, 148.000.000.30
SEP0c1167231d2e, 148.000.000.194
SEP0c1167233b9f, 148.000.000.31
CUV, 148.000.000.254
SEP0c1167231d32, 148.000.000.34
SEP501cbffcfa9c, 148.000.000.24
SEP00082fb67d5f, 148.000.000.21
SEP00082fb67701, 148.000.000.22
이것이 바로 제가 기대하는 것이지만 가끔 파일이 다음과 같이 표시되는 경우가 있습니다.
device_id,ip_address,serial_number
SEP0c1167231746
, 148.000.000.32
SEP0c1167223fa5
, 148.000.000.30
SEP0c1167224170
, 148.000.000.30
SEP0c1167231d2e
, 148.000.000.194
SEP0c1167233b9f
, 148.000.000.31
CUV
, 148.000.000.254
SEP0c1167231d32
, 148.000.000.34
SEP501cbffcfa9c
, 148.000.000.24
SEP00082fb67d5f
, 148.000.000.21
SEP00082fb67701
, 148.000.000.22
무슨 일이 일어나고 있는지 알아내려고 노력했지만 일반적인 일이 아닌 것 같습니다. 이제 이 문제만 처리하고 싶습니다. Ghex를 사용하여 문제를 일으키는 문자를 식별했습니다.
이제 모든 "0D"를 Null로 바꾸고 모든 "0A"를 유지하고 싶습니다.
참고로 "dos2unix"를 사용해 보았지만 작동하지 않았습니다.
당신이 나를 도울 수?
업데이트: 사용: sed -n -e '/,/!{N;s/\n//;}; /,/p' 입력
다음과 같은 파일로:
device_id,ip_address,serial_number
SEP0c1167231746
, 148.000.000.32
,
SEP0c1167223fa5
, 148.000.000.30
,
SEP0c1167224170
, 148.000.000.30
,
SEP0c1167231d2e
, 148.000.000.194
,
SEP0c1167233b9f
, 148.000.000.31
,
CUV
, 148.000.000.254
,
SEP0c1167231d32
, 148.000.000.34
,
SEP501cbffcfa9c
, 148.000.000.24
,
SEP00082fb67d5f
, 148.000.000.21
,
SEP00082fb67701
, 148.000.000.22
나는 다음과 같은 결과를 얻었습니다.
, 148.000.000.32
, 148.000.000.30
, 148.000.000.30
, 148.000.000.194
, 148.000.000.31
, 148.000.000.254
, 148.000.000.34
, 148.000.000.24
, 148.000.000.21
, 148.000.000.22
답변1
더 나은 옵션이 있을 수 있지만 sed
여기에 하나가 있습니다.
sed -n -e '/,/!{N;s/\n//;}; /,/p' input > output
(기본적으로 줄을 인쇄하지 않음): 줄에 쉼표가 있으면 다음을 읽으십시오.다음라인을 입력하고 개행 문자를 교체하세요. 그런 다음 해당 줄에 (현재 또는 이미) 쉼표가 있으면 해당 줄을 인쇄하십시오. 에서 읽고 input
씁니다 output
. 일부 sed에서는 sed의 -i
플래그를 사용하여 파일을 내부에서 편집할 수 있습니다.
샘플 입력:
device_id,ip_address,serial_number
SEP0c1167231746, 148.000.000.32
SEP0c1167223fa5, 148.000.000.30
SEP0c1167231746
, 148.000.000.32
SEP0c1167223fa5
, 148.000.000.30
샘플 출력:
device_id,ip_address,serial_number
SEP0c1167231746, 148.000.000.32
SEP0c1167223fa5, 148.000.000.30
SEP0c1167231746, 148.000.000.32
SEP0c1167223fa5, 148.000.000.30
답변2
hexdump를 살펴보면 다음과 같이 문제가 해결될 것 같습니다.
tr -d '\015' < input > log
8진수가 문자 \015
이기 때문입니다 carriage return
^M
.
dos2unix
도움이 되지 않은 이유 는 귀하의 경우에 존재하지 않는 dos2unix
시퀀스를 살펴보기 때문입니다.\r\n