Salut, Sans vouloir relancer la discussion sur la lisibilité d'une commande ou d'un bout de code [1], dans les 'oneliners' et outils cli, il y a aussi awk qui est très efficace :
awk '!a[$0]++' < mon_fichier.txt > nouveau_fichier.txt "sort -u" est effectivement pas mal aussi, mais a le désavantage de trier le fichier, alors que les solutions perl, python et awk ne trient rien du tout. Il est peut-être aussi utile d'expliquer cette expression awk (qui est quasiment identique à l'expression perl du début de la discussion), comme ça on appréhende la puissance de cet outil petit à petit. L'explication est la suivante : - $0 est la ligne courante, cette expression va servir d'index au tableau (c'est le $_ en perl) - a[] est un tableau qui va contenir le compte du nombre de lignes identiques (c'est le $lignes en perl) - si l'expression donnée à awk est vraie, alors la ligne courante ($0) est copiée en sortie (ce qui sera le cas pour la première occurrence d'une ligne) - si l'expression donnée à awk est fausse, alors rien n'est ajouté à la sortie (ce qui sera le cas pour toutes les répétitions de ligne) La différence entre perl et awk, est qu'awk est un outil fait pour lire les fichiers, ligne par ligne, alors que perl est un langage de programmation (qui peut donc aussi lire des fichiers ligne par ligne). C'est pourquoi il est nécessaire de lancer 'perl -n' qui, en fait, englobe l'expression donnée dans une boucle 'while' sur la lecture du fichier. Personnellement, je trouve cet algorithme assez efficace et très proche du traitement qu'un être humain aurait appliqué en recevant de telles consignes. Alors que les constructions de tableau dans les exemples python sont moins intuitives. Bonne journée, Antoine. [1] La lisibilité d'un code peut fortement dépendre à quel langage et syntaxe on est habitué. Ne mangeant pas du serpent tous les jours, il m'a fallu plus de temps pour comprendre l'exemple en python que celui en perl... Et je parle ici de lisibilité ... la beauté ? Encore plus subjectif.... Le 13 nov. 2012 à 17:03, Alioune Dia <[email protected]> a écrit : > Salut > Généralement pour faire un truc pareil , moi je ne fais ni du Python encore > moins du Perl , je fais juste : > Mon Fichier 5555.text contient > ----- > aaa > bbb > aaa > ccc > aaa > ---- > sort -u < 5555.text > 6666.text > --- > Mon Fichier 6666.text contient > aaa > bbb > ccc > --- > Tu peux même t'amuser avec head , tr , sed .......... , tu verras > que tu peux encore aller plus vite . > --Ad > > Le 13 novembre 2012 16:41, Séno Hervé Edorh <[email protected]> a écrit : > Salut les amis, > Pour des besoins professionnels je devais supprimer des lignes identiques > dans un fichier. J'étais en train d'écrire un script en python quand je suis > tombé sur cette ligne Perl. ça m'a tué... <361.gif> Ne connaissant plus rien > en Perl, quelqu'un pourrait il m'aider à traduire cette ligne de Perl en > Pyhton? en une ligne bien sur? il élimine les lignes identiques dans un > fichier. > perl -ne 'print if ! $lignes{$_}++' mon_fichier.txt > nouveau_fichier.txt > > > -- > EDORH Hervé Séno > Developper > http://www.edorh.com/ > West Africa > > > > -- > Ce message a été envoyé à la liste [email protected] > Gestion de votre abonnement : http://dakarlug.org/liste > Archives : http://news.gmane.org/gmane.org.user-groups.linux.dakarlug > Le site du DakarLUG : http://dakarlug.org > > > -- > Ce message a été envoyé à la liste [email protected] > Gestion de votre abonnement : http://dakarlug.org/liste > Archives : http://news.gmane.org/gmane.org.user-groups.linux.dakarlug > Le site du DakarLUG : http://dakarlug.org -- Antoine Delvaux http://antoine.delvaux.net Cassiopea asbl http://www.cassiopea.org PGP fingerprint: DC65 0D8B 6938 9229 33C3 18CA 4EB6 09D3 A333 3378 -- Ce message a été envoyé à la liste [email protected] Gestion de votre abonnement : http://dakarlug.org/liste Archives : http://news.gmane.org/gmane.org.user-groups.linux.dakarlug Le site du DakarLUG : http://dakarlug.org
