Utilisez la commande Linux split :
split -l 20 file.txt new
Divisez le fichier "file.txt" en fichiers commençant par le nom "new" contenant chacun 20 lignes de texte chacun.
Tapez man split
à l'invite Unix pour plus d'informations. Cependant, vous devrez d'abord supprimer l'en-tête de file.txt (en utilisant le tail
commande, par exemple), puis rajoutez-le à chacun des fichiers fractionnés.
Transformez-le en fonction. Vous pouvez désormais appeler le 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
}
Trouvé sur :http://edmondscommerce.github.io/linux/linux-split-file-eg-csv-and-keep-header-row.html
Une ligne qui préserve la ligne d'en-tête dans chaque fichier fractionné. Cet exemple vous donne 999 lignes de données et une ligne d'en-tête par fichier.
cat bigFile.csv | parallel --header : --pipe -N999 'cat >file_{#}.csv'
https://stackoverflow.com/a/53062251/401226 où la réponse contient des commentaires sur l'installation de la bonne version de parallèle (dans Ubuntu, utilisez le package parallèle spécifique, qui est plus récent que celui fourni dans moreutils)
Cela devrait fonctionner !!!
file_name
=Nom du fichier que vous souhaitez diviser.
10000
=Nombre de lignes que chaque fichier fractionné contiendrait
file_part_
=Préfixe du nom du fichier divisé (file_part_0, file_part_1, file_part_2..etc continue)
split -d -l 10000 file_name.csv file_part_