Digamos, tengo un comando commandque imprime una gran cantidad de líneas para stdout:
line1
line2
.....
lineN
Quiero guardar la salida en el disco, pero no como un solo archivo, sino como una secuencia de archivos, cada uno con 1000 líneas de stdout:
file0001.txt:
-------------
line1
....
line1000
file0002.txt:
-------------
line1001
....
line2000
etc
Traté de buscar en Google la respuesta, pero cada vez que Google me indica que teeordene, lo cual es inútil en esta situación. Probablemente, estoy ingresando consultas incorrectas.
fuente

split [arguments...] [input e.g. "-" for stdin] [output_prefix], por ejemplo:tar -c somedir | split --byes 100MB --numeric-suffixes --suffix-length=3 - somedir.tar.part-generaría un montón de archivos de 100 MB llamadossomedir.tar.part-000001, 002 y así sucesivamente.Puedes usar un script bash
lines.bashy úsalo como:
cat long_file.txt | bash lines.bashEl único problema que noté es con el
*inicio de sesiónlong_file.txt(alguien podría corregirlo).fuente
IFScadena vacía para evitar la división de palabrasread. Se usa-rpara deshabilitar la barra invertida que se escaparead. Eliminar-epara evitar que la barra invertida se escapeecho. Use comillas para evitar la división de palabrasecho. Utilice-venbashdesde 4,0 a evitar el inicio de una sub-proceso. Utilice el incremento posterior ya que su código actual pondrá en el primer archivo solo 999 líneas.a=0; while IFS='' read -r line; do printf -v filename "%04d.txt" $((a++/1000)); echo "$line" >> "$filename"; doneprintfno tiene-vinterruptor. (bash 4.2.10) Al menos no está en la página deprintfman printfdocumentos / usr / bin / printf, que nunca en la vida podrían establecer una variable de entorno. Consultehelp printfla documentación delprintfshell incorporado.++/todavía hay un error de sintaxis en la parte.