2013-01-15 49 views
1

我试图从mysqldump文件中提取数据,它的一个非常大的文件,将其恢复到数据库将需要几天,我试图使用sed或awk来提取数据,如下所示awk打印从mysql转储文件

INSERT INTO `CallDetailRecord` VALUES (1706,1340684374803,1340684375823,1340684383013,'2253040012','2253040012','2253040012','4016487697',0,'225304001200','T',1,'','',0,7,1707,'LineTester','1101','[email protected]','',5060,'10.40.10.45',5060,'[email protected]','<sip:[email protected]:5060>;tag=sansay420992041rdb3914','<sip:[email protected]>;tag=100000342','200',0,'',0,NULL,'','^A',0,NULL,NULL); 
INSERT INTO `CallDetailRecord` VALUES (1707,1340684381526,1340684381526,1340684388725,'3109757108','3109757108','','4016487697',0,'','P',0,'','',0,7,1708,'LineTest','1101','[email protected]','10.40.10.40',5060,'',5060,'[email protected]','<sip:[email protected]>;tag=100000667','\"4016487697\" <sip:[email protected]>;tag=sansay420992112rdb2348','200',0,'',0,NULL,'','^A',0,NULL,NULL); 
INSERT INTO `CallDetailRecord` VALUES (1708,1340684380791,1340684381384,1340684389761,'3172850012','3172850012','3172850012','4016487697',0,'317285001200','T',1,'','',0,8,1709,'LineTester','1101','[email protected]','',5060,'10.40.10.45',5060,'[email protected]','<sip:[email protected]:5060>;tag=sansay420992099rdb5677','<sip:[email protected]>;tag=100000344','200',0,'',0,NULL,'','^A',0,NULL,NULL); 

我想输出是

1706,1340684374803,1340684375823,1340684383013,'2253040012','2253040012','2253040012','4016487697',0,'225304001200','T',1,'','',0,7,1707,'LineTester','1101','[email protected]','',5060,'10.40.10.45',5060,'[email protected]','<sip:[email protected]:5060>;tag=sansay420992041rdb3914','<sip:[email protected]>;tag=100000342','200',0,'',0,NULL,'','^A',0,NULL,NULL 
1707,1340684381526,1340684381526,1340684388725,'3109757108','3109757108','','4016487697',0,'','P',0,'','',0,7,1708,'LineTest','1101','2.20.app_lin[email protected]','10.40.10.40',5060,'',5060,'[email protected]','<sip:[email protected]>;tag=100000667','\"4016487697\" <sip:[email protected]>;tag=sansay420992112rdb2348','200',0,'',0,NULL,'','^A',0,NULL,NULL 
1708,1340684380791,1340684381384,1340684389761,'3172850012','3172850012','3172850012','4016487697',0,'317285001200','T',1,'','',0,8,1709,'LineTester','1101','[email protected]','',5060,'10.40.10.45',5060,'[email protected]','<sip:[email protected]:5060>;tag=sansay420992099rdb5677','<sip:[email protected]>;tag=100000344','200',0,'',0,NULL,'','^A',0,NULL,NULL 

你的帮助是高度赞赏。

+0

如果DB恢复需要花费数天,无论如何大小,你做错了什么。文件有多大?转储是否包含“'ALTER TABLE'CallDetailRecord' DISABLE KEYS''之类的内容? – cmbuckley

回答

3

您可以使用:

文件a.awk:

BEGIN { FS = "VALUES \\(" }; 
"INSERT INTO \`CallDetailRecord\` VALUES" { sub(");$", "", $2); print $2 }; 

运行:

cat mysqldump_file | awk -f a.awk

+1

如果数据库字段中有任何这些'FS'字符,这将不起作用。 – cmbuckley

+0

现在它应该工作... –

+0

看起来像它的工作,你知道我怎么能在一条线上运行它? – Deano

2

使用SED:

sed -e 's/^INSERT INTO `CallDetailRecord` VALUES (//' -e 's/);$//' mysqldump_file 
+0

这也工作!非常感谢! – Deano