2012-03-01 9 views
5

Ho letto su StackOverflow sull'uso di sed per l'estrazione di dati da dump SQL, essendo più accurato, lo scopo finale è estrarre gli inserti per una tabella specifica al fine di ripristinare solo quel tavolo.Estrazione di sql insert con sed, tagli di linea

Sto usando questo:

sed -n '/LOCK TABLES `TABLE_NAME`/,/UNLOCK TABLES/p' dump.sql > output.sql 

Il problema che sto avendo è che abbiamo inserti sulla linea 1 che sono più di lungo 50Mb, così durante l'estrazione dell'inserto, l'uscita viene tagliato prima La fine della linea. piace:

...... 
(4 
3458,'0Y25565137SEOEJ','001','PREPAR',1330525937741, 
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL), 
(43459,'666 

ho cercato di utilizzare awk e anche semplice grep e il risultato è lo stesso, la linea viene tagliato.

Edit: Im usando questo su una discarica di sql da MySQL e il sistema su cui sto lavorando è una CentOS 5.2

+0

Dose 'dump.sql' ma ho tagliato? – kev

+0

no, il dump è lungo 85Gb e questo inserto si trova sul primo 10% del file. – Ikaro

+0

Hai provato su un'altra macchina? Le 50 lunghe code non sono così grandi. Anche Cygwin può gestire linee di circa 100 MB su Windows. –

risposta

0

Ma se si tratta di un file di immagine creati con exp, è possibile importare solo le tabelle necessarie con

imp user/pass tables=table1,table2 ... 
+0

Ha detto 'MySQL' –

+0

Sì, in una modifica dopo la mia risposta. Che non ho previsto, mi dispiace. –

1

si può provare awk e vedere se è meglio (io la penso così):

awk '/LOCK TABLES `TABLE_NAME`/,/UNLOCK TABLES/' dump.sql > output.sql