2010-11-08 46 views
11

Tengo un archivo de importación de csv con 33 millones de líneas que deben importarse en mi base de datos. Puedo importarlo con una aplicación de consola C# pero luego los procedimientos almacenados que se ejecutan después del tiempo de espera de importación. En consecuencia, quiero dividir el archivo en 10 archivos más pequeños.Comando de shell para dividir archivos grandes en 10 archivos más pequeños

que podía hacerlo en C#, pero sospecho que hay un enfoque mucho mejor con las utilidades de shell. Tengo cygwin instalado y puedo usar todas las utilidades de shell comunes de Linux. ¿Hay una pequeña combinación ordenada de comandos que podría utilizar para dividir el archivo?

+0

¿Qué base de datos? Con los más importantes, hay utilidades de importación que puede usar para hacer esto mucho más fácil. – kemiller2002

Respuesta

21

Uso split - por ejemplo, para dividir un archivo cada 3,4 millones de líneas (deben darle 10 archivos):

split -l 3400000

$ man split

2

La versión de división en coreutils 8.8 (aún no publicado) tendrá el comando

split -n l/10 

Por ahora, necesitará especificar un número particular de líneas por archivo

9

división por línea i s bien, sin embargo también se puede dividir por tamaño

crea archivos de 1 MB a cabo del original

split -b 1024k <file_name> 

crea archivos de 1 GB de originales

split -b 1024m <file_name> 
0

Si el archivo CSV tiene 500 filas para dividir dos parte (250 + 250)

descargar e instalar "Cygwin Terminal"

poner el comentario "split -l 250 filename.csv"

Cuestiones relacionadas