2010-11-08 22 views
11

J'ai un fichier d'importation csv avec 33 millions de lignes qui doivent être importées dans ma base de données. Je peux l'importer avec une application de console C#, puis les procédures stockées qui s'exécutent après le délai d'attente d'importation. Par conséquent, je veux diviser le fichier en 10 fichiers plus petits.Commande shell pour diviser un fichier volumineux en 10 fichiers plus petits

Je pourrais le faire en C# mais je pense qu'il y a une bien meilleure approche en utilisant les utilitaires shell. J'ai installé cygwin et peut utiliser tous les utilitaires de shell Linux courants. Y at-il une petite combinaison de commandes que je pourrais utiliser pour diviser le fichier?

+0

Quelle base de données? Avec les principaux, il existe des utilitaires d'importation que vous pouvez utiliser pour rendre cela plus facile. – kemiller2002

Répondre

21

Utiliser split - p. de diviser un fichier tous les 3,4 millions de lignes (devrait vous donner 10 fichiers):

split -l 3400000

$ man split

2

La version de scission coreutils 8.8 (pas encore publié) aura la commande

split -n l/10 

Pour l'instant vous devrez spécifier un nombre particulier de lignes par fichier

9

fractionnement par ligne i est bon mais vous pouvez aussi diviser par la taille

crée des fichiers 1MB de l'original

split -b 1024k <file_name> 

crée des fichiers de 1 Go sur l'original

split -b 1024m <file_name> 
0

Si votre fichier csv ont 500 lignes pour diviser deux partie (250 + 250)

téléchargez et installez "Terminal Cygwin"

mettre un commentaire "split -l 250 filename.csv"