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

Répondre à