Sorte de très gros fichier texte en PowerShell

J'ai norme fichiers log Apache, entre 500 mo et 2 GO en taille. J'ai besoin de trier les lignes (chaque ligne commence par une date aaaa-MM-jj hh:mm:ss, donc pas de traitement nécessaire pour le tri.

La plus simple et la plus évidente qui vient à l'esprit est

 Get-Content unsorted.txt | sort | get-unique > sorted.txt

Je suppose (sans avoir essayé) que le faire à l'aide de Get-Content prendrait une éternité dans mon 1 go de fichiers. Je ne sais pas mon chemin autour de System.IO.StreamReader, mais je suis curieux de savoir si une solution efficace pourrait être mis en place à l'aide de qui?

Merci à toute personne qui pourrait être plus efficace de l'idée.

[modifier]

J'ai essayé par la suite, et il a fallu un temps très long; quelques 10 minutes pour 400 MO.

J'ai essayé la commande ci-dessus et il a bien eu un long laps de temps (environ 10 minutes sur 460MB), et le résultat final n'était pas ce dont j'avais besoin, en plus du fichier cible (sorted.txt) a terminé deux fois la taille de la source.
Les différences de taille est probablement en raison de différents encodages utilisés. Remplacement de la > sorted.txt avec quelque chose comme | Set-Content sorted.txt pourrait faire l'affaire, sinon, vous pouvez essayer de | Out-File sorted.txt -Encoding <your choice>.
À l'aide de votre suggestion | Set-Content sorted.txt a aidé à faire le tri correctement, mais il est encore assez lent. L'ajout de -ReadCount 5000 après Get-Content fait est beaucoup plus rapide, mais le tri est cassé. Je devine, afin de trier correctement, nous devons la lire ligne par ligne, plutôt que d'un bloc à la fois... je souhaite qu'il y avait un moyen plus efficace.
Pour info; ce n'est pas quelque chose que j'ai testé, je suis contente d'invoquer la logique. Si je me trompe, je serai heureux d'être corrigé - je n'ai pas l'esprit de l'apprentissage... 🙂 Pour l'unicité, si la première ligne et la dernière d'un 10K en ligne de fichier en double (il semble improbable dans un fichier journal qui, très probablement, ajoute), vous pourriez être obligé de stocker tout ça dans la mémoire avant d'être en mesure de faire le tri que seules les lignes. Les ménagères de choses que vous êtes en train de vivre doit être en morceaux de 5000 lignes, comme d'avoir les 5000 premières lignes apparaissant après les lignes 5001-10000 dans un 10K en ligne de fichier. Chaque morceau de 5K lignes doivent être triés.
les entrées de journal sont sans doute unique. C'est un standard d'Apache fichier journal des accès, de l'enregistrement, l'accès au serveur web, donc pas de deux dossiers sont les mêmes (il faut au moins une fraction de seconde de différence pour les deux requêtes consécutives à partir de la même adresse IP et même avec d'autres paramètres).

OriginalL'auteur Predrag Vasić | 2015-09-03