7 votes

Lignes de comptage Powershell pour un fichier extrêmement volumineux

J'ai un fichier texte extrêmement volumineux de 250 Go qui nous a été remis par un fournisseur. Il nous donne également un fichier de contrôle qui est censé contenir le nombre de lignes du grand fichier. Parfois, il y a un décalage. Comment puis-je compter les lignes dans Powershell ? J'ai essayé cette commande et elle a fonctionné pendant plus d'une demi-heure et n'était pas encore terminée.

Get-content C:\test.txt | Measure-Object –Line

(gc C:\test.txt | Measure-object | select count).count

Toute aide est appréciée Merci MR

13voto

mklement0 Points 12597

Si les performances sont importantes, évitez d'utiliser les cmdlets et le pipeline ; utilisez les éléments suivants switch -File :

$count = 0
switch -File C:\test.txt { default { ++$count } }

switch -File énumère les lignes du fichier spécifié ; condition default correspond à n'importe quelle ligne.


Pour donner une idée de la différence de performance :

# Create a sample file with 100,000 lines.
1..1e5 > tmp.txt
# Warm up the file cache
foreach ($line in [IO.File]::ReadLines("$pwd/tmp.txt")) { }

(Measure-Command { (Get-Content tmp.txt | Measure-Object).Count }).TotalSeconds

(Measure-Command { $count = 0; switch -File tmp.txt { default { ++$count } } }).TotalSeconds

Exemples de résultats obtenus sur ma machine Windows 10 / PSv5.1 :

1.3081307  # Get-Content + Measure-Object
0.1097513  # switch -File

C'est-à-dire que sur ma machine, le switch -File était environ 12 fois plus rapide.

3voto

Mike Twc Points 1306

Pour un fichier aussi volumineux, je préférerais utiliser un utilitaire écrit en C. Installez gitbash, il devrait avoir la commande wc :

wc -l yourfile.txt

Je l'ai testé sur un fichier de 5GB/50M (sur le disque dur), cela a pris environ 40s. La meilleure solution powershell prenait environ 2 minutes. Vous pouvez également vérifier votre fichier, il peut avoir des index auto-incrémentaux ou une taille de ligne constante.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X