#1 Le 10/02/2013, à 15: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, à 02:51)
Hors ligne
#2 Le 10/02/2013, à 15: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, à 13:15)
Hors ligne
#3 Le 10/02/2013, à 15: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
Hors ligne
#4 Le 10/02/2013, à 16: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, à 01:07)
Hors ligne
#5 Le 10/02/2013, à 16: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
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, à 16:40
- pingouinux
Re : [Résolu] Nombre d'occurrences sur une liste
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, à 16:46
- pingouinux
Re : [Résolu] Nombre d'occurrences sur une liste
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, à 17: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, à 17: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, à 17: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, à 18: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
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#11 Le 10/02/2013, à 19:04
- Maisondouf
Re : [Résolu] Nombre d'occurrences sur une liste
@pingouinux: je ne comprends pas ....
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, à 20: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, à 20: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, à 02: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, à 02:56)
Hors ligne
#15 Le 11/02/2013, à 02: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
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#16 Le 11/02/2013, à 02: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 !!!
Le script minimax va passer en v2.
Dernière modification par roger64 (Le 11/02/2013, à 03:51)
Hors ligne
#17 Le 11/02/2013, à 06:50
- pingouinux
Re : [Résolu] Nombre d'occurrences sur une liste
- 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, à 08: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, à 08:25)
Hors ligne
#19 Le 11/02/2013, à 12: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, à 13: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, à 13: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, à 13: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