2011-06-01 23 views
5

Tengo un archivo en un sistema Linux de aproximadamente 10 GB. Contiene 20,000,000 de registros binarios, pero cada registro está separado por un delimitador ASCII "$". Me gustaría utilizar el comando dividir o alguna combinación de los mismos para dividir el archivo en partes más pequeñas. Idealmente, podría especificar que el comando debería dividir cada 1,000 registros (por lo tanto, cada 1,000 delimitadores) en archivos separados. ¿Alguien puede ayudarme con esto?División de un archivo en el delimitador

Respuesta

5

La única parte no ortodoxa del problema parece ser el separador de registros. Estoy seguro de que esto se puede arreglar fácilmente en awk, pero odio awk.

Me transferirlo en el ámbito de los problemas 'normales' en primer lugar:

tr '$' '\n' < large_records.txt | split -l 1000 

Esta voluntad por defecto crear xaa, xab, xac ... archivos; mira man split para más opciones

+0

Esto funcionó perfectamente para los registros que produce hasta que llegó a un error (supongo que es una solución muy fácil). El error es: split: sufijos del archivo de salida agotados. ¡Gracias por tu ayuda! –

+1

Ermmm ... He arreglado el enlace de la página de manual para usted; ['split ... -a 7'] (http://unixhelp.ed.ac.uk/CGI/man-cgi?split) debería funcionar bien – sehe

+0

Excelente. ¡Funciona genial! –

2

Me encanta :) awk

BEGIN { RS="$"; chunk=1; count=0; size=1000 } 
{ 
    print $0 > "/tmp/chunk" chunk; 
    if (++count>=size) { 
     chunk++; 
     count=0; 
    } 
} 

(tenga en cuenta que el operador de redirección en AWK sólo se trunca/crea el archivo en su primera invocación - las referencias posteriores se tratan como operaciones anexar - a diferencia de cáscara de redirección)

Cuestiones relacionadas