Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 09/03/2016, à 13: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, à 15:45)

Hors ligne

#2 Le 09/03/2016, à 13: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, à 13: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, à 13:48)

Hors ligne

#4 Le 09/03/2016, à 13: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 résolu, 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, à 13: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, à 13: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. hmm)

Hors ligne

#7 Le 09/03/2016, à 14: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, à 14:57

nany

Re : Extraire les nom qui se repetent

pingouinux a écrit :

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, à 15: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, à 15:40

chafer

Re : Extraire les nom qui se repetent

Merci, ca m'a vraiment aidé!

Hors ligne

#11 Le 09/03/2016, à 15:46

chafer

Re : Extraire les nom qui se repetent

credenhill a écrit :

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, à 18:03)

Hors ligne

#12 Le 09/03/2016, à 16: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, à 18: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, à 18:13)

Hors ligne

#14 Le 09/03/2016, à 19: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, à 22:50

pingouinux

Re : Extraire les nom qui se repetent

titi89 #13 a écrit :

@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, à 08: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 big_smile

@+

Dernière modification par titi89 (Le 10/03/2016, à 19:36)

Hors ligne