2013-02-28 2 views
0

데이터웨어 하우스 서버로 가져 오기 전에 mysql 덤프 파일을 CSV 형식으로 변환해야합니다.mysql 'INSERT'문을 CSV 행으로 변환

INSERT INTO `temp` VALUES (30686631,1346959848246,1346959850865,1346959998054,'18663196147','18663196147','18668839208','17326812123',3372579,'1866319614700','A',1,'','',0,147,30686632,'KeyAd','1101','[email protected]','10.40.10.40',5060,'10.40.10.46',5060,'[email protected]','<sip:[email protected]:5060>;tag=sansay507370834rdb810','\"O\'HALLORAE,AEAN\" <sip:[email protected];isup-oli=00>;tag=sansay507370829rdb1779','200',0,'',0,NULL,'','',3398812,NULL,NULL); 

내가 mysql을 삽입 문을 제거하려면이 명령을 사용하고 방법

그들은 두 개의 슬래시 \ \ 사이에 올 때 이름에 문제가있는 것 같습니다
sed -e 's/^INSERT INTO `temp` VALUES (//' -e 's/);$//' -e 's/(//;s/);//;s/,/|/g;s|["'\'']||g' 

, 나는 알아낼 수 없습니다 그것을 고쳐라.

MySQL의에서 삽입

'\"O\'HALLORAE,AEAN\" 

"O'HALLORAN,SEAN" 

Desierd 출력으로 출력을 형성하는 방법을 알아낼 수 없습니다 : 루비 허용 의존성 당신을위한 경우

30686631|1346959848246|1346959850865|1346959998054|18663196147|18663196147|18668839208|17326812123|3372579|1866319614700|A|1|||0|147|30686632|KeyAd|1101|[email protected]|10.40.10.40|5060|10.40.10.46|5060|[email protected]|<sip:[email protected]:5060>;tag=sansay507370834rdb810| "O'HALLORAN,SEAN" <sip:[email protected];isup-oli=00>;tag=sansay507370829rdb1779|200|0||0|NULL|||3398812|NULL|NULL 

답변

1

이 시도 :

$ sed -e 's/INSERT INTO `temp` VALUES (//' -e 's/);$//' -re 's/("[^"]*),([^"]*")/\1\x1\2/g;s/,/|/g;s/\x1/,/g;s/\\([^\])/\1/g' file | sed "s/'|/|/g;s/|'/|/g" 

출력 :

30686631|1346959848246|1346959850865|1346959998054|18663196147|18663196147|18668839208|17326812123|3372579|1866319614700|A|1|||0|147|30686632|KeyAd|1101|[email protected]|10.40.10.40|5060|10.40.10.46|5060|[email protected]|<sip:[email protected]:5060>;tag=sansay507370834rdb810|"O'HALLORAN,SEAN" <sip:[email protected];isup-oli=00>;tag=sansay507370829rdb1779|200|0||0|NULL|||3398812|NULL|NULL 
0

을 문을 유효한 루비 배열로 변환 할 수 있다면 파서를 활용할 수 있습니다 :

script.sh :

#!/bin/bash 

# -r to preserve backslashes 
read -r statement 

ruby=$(echo -n $statement | sed -e 's/^.*VALUES //' -e 's/;$//' -e 's/^(/[/' -e 's/)$/]/' -e 's/NULL/"NULL"/g' -e 's/\\"/"/g') 
echo $ruby | ruby -rcsv -e 'puts CSV.generate_line(eval($stdin.read), "|")' 

사용법 :

chmod +x script.sh 
echo <your statement> | ./script.sh 

30686631|1346959848246|1346959850865|1346959998054|18663196147|18663196147|18668839208|17326812123|3372579|1866319614700|A|1|""|""|0|147|30686632|KeyAd|1101|[email protected]|10.40.10.40|5060|10.40.10.46|5060|[email protected]|<sip:[email protected]:5060>;tag=sansay507370834rdb810|"""O'HALLORAE,AEAN"" <sip:[email protected];isup-oli=00>;tag=sansay507370829rdb1779"|200|0|""|0|NULL|""|""|3398812|NULL|NULL 

오픈 오피스에서 예상대로이 부하 (위해 구분 기호를 설정 한 후 "|")