Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".
Test de l'ISO d'Ubuntu francophone : nous avons besoin de testeurs pour la version francophone d'Ubuntu 14.04. Liens et informations ici.

Attention, une faille de sécurité dans bash a récemment été rapportée, il est recommandé de mettre à jour son système (plus de détails) *** mise à jour 12/10/2014 ***

#1 Le 10/02/2013, à 16:22

roger64

[Résolu] Nombre d'occurrences sur une liste

Bonjour

Je dispose de deux listes:
- une première liste de mots classés par occurrence (il y en a en moyenne plusieurs milliers).
- une deuxième liste de mots  (environ 300 à 400).
Tous les mots de la deuxième liste figurent aussi dans la première liste.
Voici un exemple des deux listes au format txt.

     52 femme
     52 été
     51 Ah
     50 suis
     49 votre
     48 tous
     48 puis
     47 fois
     47 avoir
     46 avais
     45 mes
Boëtie
Boisdeffre
Boney
Bourdonnaye
Brienne
Brindisi
Briolle
bruges
Buckingham-Palace
Cabirol
cantharidée
captain
Captain
Cardol
catapultueuse

Je souhaiterais compléter les mots de la deuxième liste - alphabétique -  avec leur nombre d'occurrences pris sur la première liste.
Je souhaite conserver  le classement alphabétique de la deuxième liste parce qu'il permet de mettre en évidence les graphies doubles ou triples.

Dernière modification par roger64 (Le 11/02/2013, à 03:51)

Hors ligne

#2 Le 10/02/2013, à 16:34

pingouinux

Re : [Résolu] Nombre d'occurrences sur une liste

Salut,

while read mot;do awk '{print $2" "$1}' < <(grep -w "$mot" liste_1);done <liste_2

Correction : Pour ne pas tenir compte des lignes vides de liste_2

while read mot;do awk '{print $2" "$1}' < <([ "$mot" ] && grep -w "$mot" liste1);done <liste2

Dernière modification par pingouinux (Le 11/02/2013, à 14:15)

Hors ligne

#3 Le 10/02/2013, à 16:58

credenhill

Re : [Résolu] Nombre d'occurrences sur une liste

hello

awk 'NR==FNR {t[$2]=$1; next} {print t[$1], $1}'  liste1 liste2

En ligne

#4 Le 10/02/2013, à 17:09

roger64

Re : [Résolu] Nombre d'occurrences sur une liste

Merci beaucoup de vos deux réponses!! Je ne pourrais vous donner les résultats que demain.

Je suis stupéfait d'avoir réussi à les tester aussi vite... Je croyais que je devrais y passer le reste de ma soirée ( il est 23 heures...)
Les deux listes donnent des résultats identiques et bons:

pingouinux (dsl!)

Agénor 10
Boum 11
Destignac 11
Grangeneuve 11
Chancelade 12
Folarçon 15
lorsqu 15
Qu 16
Nini 17
Abdallah 1
Albion 1
Aldershot 1
Alexandrowitch 1
Amiati 1
and 1
Army 1
aromales 1
asseoit 1
astic 1
Aubrys 1

credenhill

10 Agénor
11 Boum
11 Destignac
11 Grangeneuve
12 Chancelade
15 Folarçon
15 lorsqu
16 Qu
17 Nini
1 Abdallah
1 Albion
1 Aldershot
1 Alexandrowitch
1 Amiati
1 and
1 Army
1 aromales
1 asseoit
1 astic
1 Aubrys

Cependant, il me semble que le classement alphabétique original de la deuxième liste n'est pas respecté.
Il semble y avoir d'abord pour les deux solutions proposées un premier tri par occurrences (plus de dix, puis 1, 2, 3 etc.) et ensuite seulement un sous- tri  alphabétique.

Dernière modification par roger64 (Le 11/02/2013, à 02:07)

Hors ligne

#5 Le 10/02/2013, à 17:25

Maisondouf

Re : [Résolu] Nombre d'occurrences sur une liste

la solution de pengouinux marche pas, celle de credenhill marche mais donne le résultat à l'envers "numéro mot" au lieu de "mot numéro".

papounet@amd8papou:~/pingui$ while read mot;do awk '{print $2" "$1}' < <(grep -w "$mot" liste1);done <liste2
suis 50
fois 47
femme 52
été 52
Ah 51
suis 50
votre 49
tous 48
puis 48
fois 47
avoir 47
avais 46
mes 45
 
papounet@amd8papou:~/pingui$ awk 'NR==FNR {t[$2]=$1; next} {print t[$1], $1}'  liste1 liste2
50 suis
47 fois
 
papounet@amd8papou:~/pingui$ while read mot; do echo -n "$mot "; echo `grep $mot liste1` | cut -d ' ' -f1;done <liste2
suis 50
fois 47
 
papounet@amd8papou:~/pingui$ 

Je dis ça juste pour faire monter la pression wink


ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#6 Le 10/02/2013, à 17:40

pingouinux

Re : [Résolu] Nombre d'occurrences sur une liste

Maisondouf #5 a écrit :

la solution de pengouinux marche pas

Si tu es parti d'une liste2 triée et sans doublons (comme spécifié dans l'énoncé), je suis surpris. Quelles sont tes fichiers liste1 et liste2 ?

Hors ligne

#7 Le 10/02/2013, à 17:46

pingouinux

Re : [Résolu] Nombre d'occurrences sur une liste

roger64 #4 a écrit :

Cependant, il me semble que le classement alphabétique original de la deuxième liste n'est pas respecté.

Vérifie le classement initial de liste2. Nos deux propositions ne modifient pas l'ordre de classement.

Hors ligne

#8 Le 10/02/2013, à 18:01

Maisondouf

Re : [Résolu] Nombre d'occurrences sur une liste

@pingouinux:
liste1 (la même que lui)

     52 femme
     52 été
     51 Ah
     50 suis
     49 votre
     48 tous
     48 puis
     47 fois
     47 avoir
     46 avais
     45 mes

liste 2 (juste 2 mots)

suis
fois
papounet@amd8papou:~/pingui$ awk --version
GNU Awk 3.1.8

Dernière modification par Maisondouf (Le 10/02/2013, à 18:04)


ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#9 Le 10/02/2013, à 18:22

pingouinux

Re : [Résolu] Nombre d'occurrences sur une liste

@Maisondouf : GNU Awk 3.1.8, Ubuntu 12.04.2 LTS, 3.2.0-38-generic

$ cat liste1
     52 femme
     52 été
     51 Ah
     50 suis
     49 votre
     48 tous
     48 puis
     47 fois
     47 avoir
     46 avais
     45 mes

$ cat liste2_
fois
suis

$ while read mot;do awk '{print $2" "$1}' < <(grep -w "$mot" liste1);done <liste2_
fois 47
suis 50

Hors ligne

#10 Le 10/02/2013, à 19:02

Watael

Re : [Résolu] Nombre d'occurrences sur une liste

en commandes

sort -k2 liste1 | join -1 2 -2 1 - liste2
fois 47
suis 50

eval, c'est mal.

Hors ligne

#11 Le 10/02/2013, à 20:04

Maisondouf

Re : [Résolu] Nombre d'occurrences sur une liste

@pingouinux: je ne comprends pas .... hmm

papounet@amd8papou:~$ cd pingui/
papounet@amd8papou:~/pingui$ ls
liste1  liste2
papounet@amd8papou:~/pingui$ cat liste1
     52 femme
     52 été
     51 Ah
     50 suis
     49 votre
     48 tous
     48 puis
     47 fois
     47 avoir
     46 avais
     45 mes

papounet@amd8papou:~/pingui$ cat liste2
suis
fois

papounet@amd8papou:~/pingui$ while read mot;do awk '{print $2" "$1}' < <(grep -w "$mot" liste1);done <liste2
suis 50
fois 47
femme 52
été 52
Ah 51
suis 50
votre 49
tous 48
puis 48
fois 47
avoir 47
avais 46
mes 45
 

papounet@amd8papou:~/pingui$ uname -a
Linux amd8papou 3.2.0-37-generic #58-Ubuntu SMP Thu Jan 24 15:28:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux
papounet@amd8papou:~/pingui$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=12.04
DISTRIB_CODENAME=precise
DISTRIB_DESCRIPTION="Ubuntu 12.04.2 LTS"
papounet@amd8papou:~/pingui$ 

ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#12 Le 10/02/2013, à 21:27

pingouinux

Re : [Résolu] Nombre d'occurrences sur une liste

@Maisondouf : Je ne comprends pas non plus.
Ma version de bash :

GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)

Hors ligne

#13 Le 10/02/2013, à 21:48

Maisondouf

Re : [Résolu] Nombre d'occurrences sur une liste

@pingouinux: le même....GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)


ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#14 Le 11/02/2013, à 03:06

roger64

Re : [Résolu] Nombre d'occurrences sur une liste

Bonjour

J'ai repris les tests en vraie grandeur. Je confirme les résultats que j'avais postés.
Vous les trouverez dans le fichier test http://dl.dropbox.com/u/31141350/Test.zip
Il y a un dossier pingouinux et un dossier credenhill avec les résultats détaillés et bien sûr le script de lancement.

Pour chacun des deux, il a été mixé les listes 2 et  3 pour donner une liste résultat 6.
- la liste 2 est la très grosse liste de mots classés par nombre d'occurrences
- la liste 3 est la liste restreinte (418 mots) classée par ordre alphabétique.

Dans les deux cas, vous verrez que la liste résultat 6 rajoute bien les occurrences pour tous les mots de la liste restreinte mais ne suit pas l'ordre alphabétique.

Avec la proposition de Watael je ne retrouve plus que 77 mots sur 418.

Dernière modification par roger64 (Le 11/02/2013, à 03:56)

Hors ligne

#15 Le 11/02/2013, à 03:32

Watael

Re : [Résolu] Nombre d'occurrences sur une liste

j'ai fait un essai avec les fichiers Test/pingouinux/Service\ de\ nuit{2,3}.txt
et j'obtiens l'erreur suivante :
join: Test/pingouinux/Services de nuit3.txt:5: n'est pas trié : Chancelade
et , effectivement, 77 lignes.

donc, je trie aussi le fichier "3" pour, finalement, obtenir 418 lignes

join -1 2 -2 1 <(sort -k2 Test/pingouinux/Services\ de\ nuit2.txt) <(sort Test/pingouinux/Services\ de\ nuit3.txt)| wc -l
418

eval, c'est mal.

Hors ligne

#16 Le 11/02/2013, à 03:51

roger64

Re : [Résolu] Nombre d'occurrences sur une liste

@Watael

J'obtiens maintenant tous les 418 mots, classés par ordre alphabétique en mentionnant le nombre d'occurrences (nom, nombre) . > Résolu.

Merci à vous tous de votre aide. C'était une démonstration impressionnante !!! smile

Le script minimax va passer en v2. tongue

Dernière modification par roger64 (Le 11/02/2013, à 04:51)

Hors ligne

#17 Le 11/02/2013, à 07:50

pingouinux

Re : [Résolu] Nombre d'occurrences sur une liste

roger64  #14 a écrit :

- la liste 3 est la liste restreinte (418 mots) classée par ordre alphabétique.

Dans les deux cas, vous verrez que la liste résultat 6 rajoute bien les occurrences pour tous les mots de la liste restreinte mais ne suit pas l'ordre alphabétique.

Le résultat n'est pas classé par ordre alphabétique parce que la liste3 ne l'est pas (Test/pingouinux/Services\ de\ nuit3.txt).

Hors ligne

#18 Le 11/02/2013, à 09:24

roger64

Re : [Résolu] Nombre d'occurrences sur une liste

@pingouinux

Tu as raison. Désolé de cette nouvelle imprécision. Mon énoncé était fautif. Vos solutions respectent strictement l'ordre original de la liste3 qui n'est cependant pas l'ordre alphabétique comme je l'avais indiqué.

La nouvelle liste résultat - 6-  remet la liste 3 dans un ordre alphabétique strict en rajoutant  les occurrrences.

Dernière modification par roger64 (Le 11/02/2013, à 09:25)

Hors ligne

#19 Le 11/02/2013, à 13:16

pingouinux

Re : [Résolu] Nombre d'occurrences sur une liste

@Maisondouf  #11 : J'ai réussi à reproduire ton résultat avec une ligne vide à la fin de liste2

Hors ligne

#20 Le 11/02/2013, à 14:06

Maisondouf

Re : [Résolu] Nombre d'occurrences sur une liste

Effectivement, pas le même comportement

papounet@amd8papou:~/pingui$ hd liste2
00000000  73 75 69 73 0a 66 6f 69  73 0a                    |suis.fois.|
0000000a
papounet@amd8papou:~/pingui$  while read mot;do awk '{print $2" "$1}' < <(grep -w "$mot" liste1);done <liste2
suis 50
fois 47
papounet@amd8papou:~/pingui$ hd liste2
00000000  73 75 69 73 0a 66 6f 69  73 0a 0a                 |suis.fois..|
0000000b
papounet@amd8papou:~/pingui$  while read mot;do awk '{print $2" "$1}' < <(grep -w "$mot" liste1);done <liste2
suis 50
fois 47
femme 52
été 52
Ah 51
suis 50
votre 49
tous 48
puis 48
fois 47
avoir 47
avais 46
mes 45
 
papounet@amd8papou:~/pingui$ 

Faudrait tester $mot pour savoir si il ,est vide

EDIT:

 while read mot;do if [ "$mot" != "" ];then awk '{print $2" "$1}' < <(grep -w "$mot" liste1);fi;done <liste2

Dernière modification par Maisondouf (Le 11/02/2013, à 14:08)


ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor,  OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)

Hors ligne

#21 Le 11/02/2013, à 14:17

pingouinux

Re : [Résolu] Nombre d'occurrences sur une liste

Je viens de faire la correction en #2 (différemment de toi).

Hors ligne

Haut de page ↑