#1 Le 09/03/2016, à 12:09
- chafer
Extraire les nom qui se repetent
Bonjour,
Je suis entrain d'ecrire un script qui extrait le nom des personnes qui sont multiples dans un fichier, est-ce possible de la faire?
voici un extrait de mon fichier:
celine.bernardiere
celine_bernardiere
celine-bernardiere
justin_riviere
justin_riviere2
ines_boitier
ines-boitier2
ines_boitier2
tom_bim
william_pellier
Je voudrait pouvoir avoir un fichier contenant:
celine bernardiere
justin riviere
ines boitier
Dernière modification par chafer (Le 09/03/2016, à 14:45)
Hors ligne
#2 Le 09/03/2016, à 12:30
- credenhill
Re : Extraire les nom qui se repetent
hello
justin_riviere ne se répète pas ou faut-il ignorer le chiffre ?
Hors ligne
#3 Le 09/03/2016, à 12:32
- nany
Re : Extraire les nom qui se repetent
Bonjour,
nany@stupidcomputer:~$ cat fichier
celine.bernardiere
celine_bernardiere
celine-bernardiere
justin_riviere
justin_riviere2
ines_boitier
ines-boitier2
ines_boitier2
tom_bim
william_pellier
nany@stupidcomputer:~$
nany@stupidcomputer:~$ sed -r 's/[._-]/ /' fichier | uniq
celine bernardiere
justin riviere
justin riviere2
ines boitier
ines boitier2
tom bim
william pellier
nany@stupidcomputer:~$
EDIT : changement de l’option de sed.
Dernière modification par nany (Le 09/03/2016, à 12:48)
Hors ligne
#4 Le 09/03/2016, à 12:34
- erresse
Re : Extraire les nom qui se repetent
Quelque chose comme ça ?
user@user:~/Bureau$ cat test_bak
celine.bernardiere
celine_bernardiere
celine-bernardiere
justin_riviere
justin_riviere2
ines_boitier
ines-boitier2
ines_boitier2
tom_bim
william_pellier
user@user:~/Bureau$ sed -ri_bak s/[_.-]/\ / test | sort -u test
celine bernardiere
ines boitier
ines boitier2
justin riviere
justin riviere2
tom bim
william pellier
user@user:~/Bureau$
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#5 Le 09/03/2016, à 12:39
- tuxmarc
Re : Extraire les nom qui se repetent
Bonjour !
Je vais me coucher moins bête que je me suis levé, respect pour la maîtrise de la ligne de commande !!!
Vive Richard Stalmann, Linus Torvalds, et tous les fondus de Linux.
De l'Ordinosaure fait à 90% de récup, à deux portables LDLC, neufs sans système et une carte mère sans boitier, tous libres !!
Parrain Linux sur www.parrain-linux.com et www.parrains.linux.free.fr
Hors ligne
#6 Le 09/03/2016, à 12:46
- nany
Re : Extraire les nom qui se repetent
Oups, oui, option -r pour le sed et non -e ! (J’arrivais pas à comprendre pourquoi je devais échapper les caractères. )
Hors ligne
#7 Le 09/03/2016, à 13:07
- pingouinux
Re : Extraire les nom qui se repetent
Bonjour,
@nany #3 : Remarques
L'utilisation de uniq impose que le fichier d'origine soit déjà trié (c'est en effet le cas de l'exemple)
Il semble (d'après chafer #1) que le fichier final ne doive pas contenir les éléments uniques du fichier d'origine.
Je n'ai pas encore trouvé de méthode astucieuse…
Hors ligne
#8 Le 09/03/2016, à 13:57
- nany
Re : Extraire les nom qui se repetent
L'utilisation de uniq impose que le fichier d'origine soit déjà trié (c'est en effet le cas de l'exemple)
J’avoue n’avoir pris en compte que le fichier de départ sans me fouler. Mea culpa.
Il semble (d'après chafer #1) que le fichier final ne doive pas contenir les éléments uniques du fichier d'origine.
Je n’avais pas compris ça en première lecture.
Je viens de relire et, effectivement, il ne faudrait donc ressortir que les doublons (en exceptant des caractères). Ça complexifie le traitement, en effet.
Du coup, la demande de credenhill est loin d’être anodine. En effet, on voit, d’après le fichier de sortie demandé, que justin_riviere doit être traité comme doublon (en ignorant le chiffre 2) alors qu’il faudrait apparemment différencier ines boitier et ines boitier2
Hors ligne
#9 Le 09/03/2016, à 14:08
- pingouinux
Re : Extraire les nom qui se repetent
Je propose ceci (je supprime tous les chiffres en fin de nom) :
awk '{gsub(/[_.-]/," ");sub(/[0-9]+$/,"");nom[$0]+=1}END{for(k in nom) {if(nom[k]>1)print k}}' fichier
qui donne ce résultat
celine bernardiere
ines boitier
justin riviere
Hors ligne
#10 Le 09/03/2016, à 14:40
- chafer
Re : Extraire les nom qui se repetent
Merci, ca m'a vraiment aidé!
Hors ligne
#11 Le 09/03/2016, à 14:46
- chafer
Re : Extraire les nom qui se repetent
hello
justin_riviere ne se répète pas ou faut-il ignorer le chiffre ?
enfaite il faut supprimer le chiffre, je viens de recrtifier ma question
Dernière modification par chafer (Le 09/03/2016, à 17:03)
Hors ligne
#12 Le 09/03/2016, à 15:34
- credenhill
Re : Extraire les nom qui se repetent
$ awk '{sub("[0-9]*$", ""); sub("[-._]", " ")} t[$0]++==1' fichier
celine bernardiere
justin riviere
ines boitier
Hors ligne
#13 Le 09/03/2016, à 17:11
- titi89
Re : Extraire les nom qui se repetent
bonjour,
je me permet une remarque si je ne me trompe pas
awk '{sub("[0-9]*$", ""); gsub("[-._]", " ")} !x[$0]++' monfichier.txt
doit fonctionner
gsub pour les noms "de.la.conté_du-moulin" sub s'arrête à la 1ere occurence trouvé
@pingouinux
mettre >0 sinon ne prend pas en charge la 1ere ligne
cordialement
Dernière modification par titi89 (Le 09/03/2016, à 17:13)
Hors ligne
#14 Le 09/03/2016, à 18:17
- LeoMajor
Re : Extraire les nom qui se repetent
variante avec split
awk '/[a-z]+[_.-][a-z]+$/{split($NF,part,"[_.-]");noms[part[1]" "part[2]]++;}; END{ for(nom in noms) print nom | " sort | uniq" }' /tmp/example
celine bernardiere
ines boitier
justin riviere
tom bim
william pellier
www allo
Hors ligne
#15 Le 09/03/2016, à 21:50
- pingouinux
Re : Extraire les nom qui se repetent
@pingouinux
mettre >0 sinon ne prend pas en charge la 1ere ligne
Non, je maintiens ma commande en #9, et je m'incline devant l'élégance de celle de credenhill #12. Je pense aussi qu'il serait préférable d'y remplacer le second sub par un gsub.
@titi89 et LeoMajor
Les noms n'apparaissant qu'une seule fois dans le fichier d'origine ne doivent pas figurer dans la sortie.
Hors ligne
#16 Le 10/03/2016, à 07:46
- titi89
Re : Extraire les nom qui se repetent
oups ok j'avais pas vu pour les noms uniques dans la liste
sed -r 's/[._-]/ /g ; s/[0-9]//g' monfichier | sort | uniq -c | sed '/ 1 /d'
cela le fait aussi et tri par ordre alphabétique et te compte le nombre des multiples apparitions normalement
@+
Dernière modification par titi89 (Le 10/03/2016, à 18:36)
Hors ligne