Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Tri d'un grand nombre de lignes

3 réponses
Avatar
Bob
Bonjour,
J'ai un fichier texte avec un grand nombre de lignes (entre 12 et 15
millions) que je souhaite trier.
Les enregistrements sont constitués de champs séparés par un séparateur.
Je suis capable d'extraire les valeurs des champs à l'aide d'une expression
régulière (merci Benoit) mais il me reste le tri.
Est-ce utopique d'imaginer le faire avec Perl ?
Des pistes...
Merci d'avance.
Bob

3 réponses

Avatar
Dav'
Pour le tri, tu peux faire comme dans cet exemple (tri sur le deuxieme
champs) et utiliser une "Schwartzian Transform" :

#!perl

my @liste = (<DATA> ) ;


my @sorted =
map { $_->[0] }
sort { $a->[1] <=> $b->[1] }
map { [$_, ( split ( ":", $_) )[1] ] }
@liste;

print @sorted ;


__DATA__
a:1:fr
b:2:us
d:56:uk
e:3:br
j:567:nl

Vu que le separateur est fixé ( à ":" ) j'ai fais un split plutot
qu'une regexp .

Maintenant 15 000 000 de lignes, je ne sais pas si ça va etre faisable
en terme de mémoire !! Avec 80 caracteres par ligne ça fait du 1200
Mo, donc si tu as 2Go de ram ça devrait passer ... Faut tester !





Bonjour,
J'ai un fichier texte avec un grand nombre de lignes (entre 12 et 15
millions) que je souhaite trier.
Les enregistrements sont constitués de champs séparés par un sépa rateur.
Je suis capable d'extraire les valeurs des champs à l'aide d'une expres sion
régulière (merci Benoit) mais il me reste le tri.
Est-ce utopique d'imaginer le faire avec Perl ?
Des pistes...
Merci d'avance.
Bob


Avatar
Jacques Caron
On 5 Sep 2005 04:00:33 -0700, Dav' wrote:

Maintenant 15 000 000 de lignes, je ne sais pas si ça va etre faisable
en terme de mémoire !! Avec 80 caracteres par ligne ça fait du 1200
Mo, donc si tu as 2Go de ram ça devrait passer ... Faut tester !


Ne pas oublier les limites imposées sur la taille des processus... C'est
sur quel OS?

Jacques.

Avatar
BP
__DATA__
a:1:fr
b:2:us
d:56:uk
e:3:br
j:567:nl

Vu que le separateur est fixé ( à ":" ) j'ai fais un split plutot
qu'une regexp .

Maintenant 15 000 000 de lignes, je ne sais pas si ça va etre faisable
en terme de mémoire !! Avec 80 caracteres par ligne ça fait du 1200
Mo, donc si tu as 2Go de ram ça devrait passer ... Faut tester !



Peut-être en convertissant le fichier en une DB comme SQLite par exemple,
puis travailler sur celle-ci serait plus réaliste.