Utilice el comando de división de Linux:
split -l 20 file.txt new
Divida el archivo "archivo.txt" en archivos que comiencen con el nombre "nuevo", cada uno con 20 líneas de texto cada uno.
Escribe man split
en el indicador de Unix para obtener más información. Sin embargo, primero deberá eliminar el encabezado de file.txt (usando el tail
comando, por ejemplo) y luego vuelva a agregarlo a cada uno de los archivos divididos.
Lo convirtió en una función. Ahora puedes llamar al splitCsv <Filename> [chunkSize]
splitCsv() {
HEADER=$(head -1 $1)
if [ -n "$2" ]; then
CHUNK=$2
else
CHUNK=1000
fi
tail -n +2 $1 | split -l $CHUNK - $1_split_
for i in $1_split_*; do
sed -i -e "1i$HEADER" "$i"
done
}
Encontrado en:http://edmondscommerce.github.io/linux/linux-split-file-eg-csv-and-keep-header-row.html
One-liner que conserva la fila del encabezado en cada archivo dividido. Este ejemplo le brinda 999 líneas de datos y una fila de encabezado por archivo.
cat bigFile.csv | parallel --header : --pipe -N999 'cat >file_{#}.csv'
https://stackoverflow.com/a/53062251/401226 donde la respuesta tiene comentarios sobre la instalación de la versión correcta de paralelo (en ubuntu use el paquete paralelo específico, que es más reciente que el que se incluye en moreutils)
¡¡¡Esto debería funcionar!!!
file_name
=Nombre del archivo que desea dividir.
10000
=Número de filas que contendría cada archivo dividido
file_part_
=Prefijo del nombre del archivo dividido (file_part_0,file_part_1,file_part_2..etc continúa)
split -d -l 10000 nombre_archivo.csv parte_archivo_