\n
PIPE 구분 기호가 있는 많은 수의 레코드가 포함된 플랫 파일 소스가 제공되고 필드 중 하나가 캐리지 리턴(여러 줄)을 받고 줄 바꿈( )으로 시작하는 문제가 발생했습니다 . 그렇다면 \n
파일에서 문자를 삭제하는 방법은 무엇입니까?
예:
-000123456|1654321|6/12/2002 8:49:20 AM|
tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|
누구든지 진행 방법을 제안할 수 있나요?
답변1
\n
모든 레코드에서 필드가 이 필드로 시작한다는 것을 알고 있는 경우 sed
다음과 같이 사용할 수 있습니다.
sed "N;s/|\n/|/"
새로운 줄을 제거하십시오. 줄 구분 기호 sed
로 사용되므로 먼저 \n
다음 줄을 이미 처리된 줄(command)에 연결하고 N
프로세스의 sed
연결된 줄 사이에 개행 문자를 삽입해야 합니다 .
이 문제가 무작위로 발생하는 경우(모든 레코드에서 발생하는 것은 아님) 파일 내용을 구문 분석하기 위해 보다 강력한 도구를 사용해야 합니다. 기본적으로 필드 수를 계산해야 합니다. 아니면 awk
이 트릭을 우아하게 수행할 수도 있습니다. (내 생각 perl
엔 그것도 수행할 수 있을 것 같지만 아마 가고 싶지 않을 것입니다.)sed
그 방향).
답변2
사용할 수 있는 도구는 많지만 sed
이러한 도구는 다음을 위해 만들어졌습니다.
sed -i 's,\\n,,g' Flatfile
작동 방식을 보여주기 위해 방금 제공한 입력과 동일한 표현식은 다음과 같습니다.
$ echo '-000123456|1654321|6/12/2002 8:49:20 AM|\n tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|' | sed 's,\\n,,g'
-000123456|1654321|6/12/2002 8:49:20 AM| tt Cynthia L Eggleston E456585 remove move the funds adv account in fcle flagged on 710091 pmt due 12-16- 15|
단지 문자열을 찾아 \n
길이가 0인 빈 문자열로 바꿉니다(효과적으로 삭제). 가 두 개 있으므로 특별한(개행) 의미를 잃고 두 문자로 일치될 수 있습니다 \
.\n