Verwenden Sie den Linux-Split-Befehl:
split -l 20 file.txt new
Teilen Sie die Datei "file.txt" in Dateien auf, die mit dem Namen "neu" beginnen und jeweils 20 Textzeilen enthalten.
Geben Sie man split
ein an der Unix-Eingabeaufforderung für weitere Informationen. Allerdings müssen Sie zuerst den Header aus file.txt entfernen (mit dem tail
Befehl, zum Beispiel) und fügen Sie es dann wieder zu jeder der geteilten Dateien hinzu.
Habe es zu einer Funktion gemacht. Sie können jetzt splitCsv <Filename> [chunkSize]
anrufen
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
}
Gefunden auf:http://edmondscommerce.github.io/linux/linux-split-file-eg-csv-and-keep-header-row.html
Einzeiler, der die Kopfzeile in jeder geteilten Datei beibehält. Dieses Beispiel gibt Ihnen 999 Datenzeilen und eine Kopfzeile pro Datei.
cat bigFile.csv | parallel --header : --pipe -N999 'cat >file_{#}.csv'
https://stackoverflow.com/a/53062251/401226, wo die Antwort Kommentare zur Installation der richtigen Version von Parallel enthält (in Ubuntu verwenden Sie das spezifische Parallel-Paket, das neuer ist als das, was in Moreutils gebündelt ist)
Das sollte funktionieren !!!
file_name
=Name der Datei, die Sie teilen möchten.
10000
=Anzahl der Zeilen, die jede aufgeteilte Datei enthalten würde
file_part_
=Präfix des aufgeteilten Dateinamens (Datei_Teil_0, Datei_Teil_1, Datei_Teil_2..etc geht weiter)
split -d -l 10000 Dateiname.csv Dateiteil_