2012-07-16 3 views
2

LOAD DATA INFILE을 통해 Mysql에로드하려는 파이프로 구분 된 데이터 파일이 있습니다. 같은sed를 사용하여 파이프로 구분 된 파일에서 인접한 일치 항목을 검색하고 바꾸기

뭔가 :

a|||d|e 
x|y|z|0|1 
... 

나는 데이터가 NULL 값으로 인식되도록 \N와 빈 필드를 대체합니다. 첫 번째 데이터 라인에, 두 번째 파이프가 먹 -

거의 작동하지만, 꽤

가 나오지 '/ g | | \\ N S/|| /'하고

두 번째 인접한 빈 필드가 파싱되지 않도록 sed에 의해 up!

제 생각에는 제 1 sed의 결과를 파이프하여 다른 동일한 검색을하고 두 번째 시간을 대체하여 인접한 빈 필드를 없애는 것입니다.

제 질문은 sed에서이 문제를 해결하는 좀 더 세련된 방법은 무엇입니까?

TIA. 당신이 나오지하여 데이터 파일을 처리하려는 경우

추가 참고

,이 같은 라인의 경우 말 조심하십시오 | I | J | K

시간 |

당신은 나오지도

에 파이프해야합니다의/| $/| \\ N/g '

그 끝 (end-of-line)의 경우를 처리 할 수.

DOS에서 UNIX 시스템으로 이동하는 경우 sed search-and-replace를 사용하여 데이터 파일에서 '\ r'을 지울 수도 있습니다.

LOAD DATA INFILE을 사용할 때 Mysql의 모든 경고를 설명하는 것이 좋습니다. 악의적 사례를 잡는 데 도움이됩니다.

답변

2

당신은 반복을 사용할 수 있습니다 (t) 명령 :

echo 'a|||d|e' | sed ':repeat; s/||/|\N|/g; t repeat' 
+0

좋아 보인다 - 타이 ... ... 더 나은 아무것도 함께 제공하지 않는 경우 해결책으로 받아 들일 것입니다! – kfmfe04

관련 문제