Comment diviser un gros fichier texte dans plusieurs fichiers en powershell
Bonjour, j'ai un gros fichier texte comme ceci
BIGFILE.TXT
COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,COLUMN6,COLUMN7,COLUMN8
11/24/2013,50.67,51.22,50.67,51.12,17,0,FILE1
11/25/2013,51.34,51.91,51.09,51.87,23,0,FILE1
12/30/2013,51.76,51.82,50.86,51.15,13,0,FILE1
12/31/2013,51.15,51.33,50.45,50.76,18,0,FILE1
1/1/2014,50.92,51.58,50.84,51.1,19,0,FILE2
1/4/2014,51.39,51.46,50.95,51.21,14,0,FILE2
1/7/2014,51.08,51.2,49.84,50.05,35,0,FILE2
1/8/2014,50.14,50.94,50.01,50.78,100,0,FILE3
1/11/2014,50.63,51.41,50.52,51.3,190,0,FILE3
1/15/2014,54.03,55.74,53.69,54.93,110,0,FILE4
1/19/2014,53.67,54.19,53.55,53.82,24,0,FILE4
1/20/2014,53.83,54.26,53.47,53.53,23,0,FILE4
1/21/2014,53.8,54.55,53.7,54.1,24,0,FILE4
1/26/2014,53.26,53.93,53.23,53.65,31,0,FILE5
1/27/2014,53.78,54,53.64,53.81,110,0,FILE5
Je suis à la recherche d'une façon de découper ce fichier en plusieurs fichiers texte. Dans ce cas, un fichier est divisé en 5 fichiers texte. Le nom de chaque fichier texte seront prises à partir de la colonne numéro 8. Le gros fichier délimité par des virgules. Donc, la sortie serait:
FILE1.txt
COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,COLUMN6,COLUMN7,COLUMN8
11/24/2013,50.67,51.22,50.67,51.12,17,0,FILE1
11/25/2013,51.34,51.91,51.09,51.87,23,0,FILE1
12/30/2013,51.76,51.82,50.86,51.15,13,0,FILE1
12/31/2013,51.15,51.33,50.45,50.76,18,0,FILE1
FILE2.TXT
COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,COLUMN6,COLUMN7,COLUMN8
1/1/2014,50.92,51.58,50.84,51.1,19,0,FILE2
1/4/2014,51.39,51.46,50.95,51.21,14,0,FILE2
1/7/2014,51.08,51.2,49.84,50.05,35,0,FILE2
FILE3.TXT
COLUMN1,COLUMN2,COLUMN3,COLUMN4,COLUMN5,COLUMN6,COLUMN7,COLUMN8
1/8/2014,50.14,50.94,50.01,50.78,100,0,FILE3
1/11/2014,50.63,51.41,50.52,51.3,190,0,FILE3
.
.
.
Le gros fichier texte a plusieurs milliers de lignes.
Quelqu'un at-il une idée de comment faire cela?
Vous remercie pour l'aide.
J.
Vous devez vous connecter pour publier un commentaire.
Si le gros fichier de plusieurs milliers de lignes, il n'est pas aussi grand et vous pouvez utiliser
Import-CSV
etExport-CSV
pour gérer le contenu.D'autre part, si le fichier est tellement grand que votre système étouffe sur
Import-CSV
, de lire le fichier avecIO.StreamReader()
et traiter le fichier ligne par ligne.Edit:
Oh, des milliers de fichiers de sortie sont un peu plus difficile à gérer. Disk I/O avec beaucoup de
Add-Content
est une performance killer, mais pour un seul coup de feu opération de quelque chose comme cela devrait fonctionner:Pour augmenter les performances, de sortie de fichier de base de
StringBuilder
de mise en mémoire tampon fonctionne très bien.Edit2:
Voici une autre version. Il contient une table de hachage qui contient StringBuilder objets. Chaque nom de fichier de sortie à partir de la dernière colonne est utilisée comme clé et sa valeur est un StringBuilder qui contient des données de texte. Cette approche stocke le fichier de sortie de données en mémoire, donc x64 et quelques gigaoctets de mémoire vive est expedted raisonnablement penser que de gros fichiers d'entrée. Les tampons pourrait être vidées sur le disque chaque maintenant et puis de conserver la mémoire; ceci requiert de la tenue de la comptabilité.
'(?i)(\w+\d)$'
et cochez les accepter de répondre à la marque si vous êtes heureux.Ici est exactement ce que je cherchais, basé sur l'aide de Bob McCoy
Il y a juste un petit problème avec ce code. Il a fallu près de 80 minutes de diviser mon gros fichier en 1800 petits fichiers, donc si quelqu'un a d'autres suggestions comment augmenter les performances de ce code, il serait très appréciée. Mayby il permettrait que "bigfile" est triée par ordre alphabétique de la colonne n ° 8. Et les noms de tous les petits fichiers sont également stockés dans la colonne n ° 8.
Out-File
dansforeach
crée dans votre cas environ 250k fichier ouvrir - fichier en écriture du fichier à proximité de l'exploitation. Voir mon édité réponse que les tampons de sortie.