IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

occurence d'un mot


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut occurence d'un mot
    Bonjour tout le monde!

    en fait je voulais faire une recherche d'un mot dans un fichier (en anglais)!
    Ce mot existe en singulier et/ou pluriel et je veux bien compter l'occurrence de cette expression! donc je dois la chercher en singulier et en pluriel!
    j'ai fait alors un script shell pour compter les occurrences. vu que dans la langue anglaise il existe plusieurs forme des pluriel je dois alors citer tous les cas!
    j'ai commencer par un simple test: si le mot se termine par "y" (comme lady) son pluriel se termine par "ies" (=> ladies).
    et bien j'ai fait une tentative mais je pense qu'elle est fausse qu'elle je connais pas trop le shell! voilà ce que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if [ "$a" == "*y$" ]
    then
    grep -w -i "$a" ./nom-fich && grep -w -i "*ies" ./nom-fich  | wc -l>> ./resultat
    fi
    voilà je veux savoir comment designer une chaine de carctére quelconque qui se termine par "y" (je pense que c'est faux en mettant: "$a"== "*y$"). j'espère que vous puissiez corriger mes erreurs!
    Merci d'avance!

  2. #2
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    tu peux compter le contenu de A pour comparer à un chiffre par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    francois@francois-laptop:~/boulot$ a=y
    francois@francois-laptop:~/boulot$ if [ $(echo $a | grep "y" |wc -l) -eq 1 ] ; then grep -wi ".*ies" ./nom-fich | wc -l ; fi
    5
    francois@francois-laptop:~/boulot$ rm nom-fich
    ou de façon plus logique :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    francois@francois-laptop:~/boulot$ ( echo $a | grep -n "y" && grep -wi ".*ies" ./nom-fich || echo rien ) > log
    francois@francois-laptop:~/boulot$ cat log
    rien
    francois@francois-laptop:~/boulot$ a=y
    francois@francois-laptop:~/boulot$ ( echo $a | grep -n "y" && grep -wi ".*ies" ./nom-fich || echo rien ) > log
    francois@francois-laptop:~/boulot$ cat log
    1:y
    ladies
    ladies
    ladies
    ladies
    ladies
    francois@francois-laptop:~/boulot$

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo "$(< auxalis.in)"
    foo bar lady baz
    foo ladies bar
    foo lady bar lady baz
    foo ladies bar lady ladies
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    unset n
    singulier=lady
    pluriel="${singulier::${#singulier}-1}ies"
    while read line
    do for item in $line;
       do [ "$item" = "$singulier" -o "$item" = "$pluriel" ] && ((n++))
       done
    done <auxalis.in
    echo "$singulier/$pluriel : $n occurrence(s)"
    lady/ladies : 7 occurrence(s)
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut
    Merci pour vos aides! c'étaient super intéressantes mais c'est pas ça que je veux!!
    pour la 1ére façon elle donne tous les pluriels qui existent dans le fichier alors que je veux compter seulement le pluriel de mon exple!
    pour la 2éme façon je peux pas utiliser , en entrée, le fichier où je vais chercher l'occurrence (dans votre exple vous l'avez appelé "auxalis.ini") car j'utilise déjà en entrée un fichier qui contient tous les exples: càd j'ai un fichier txt qui contient une cinquantaine de lignes dans chaque ligne j'ai quatre champs (à titre d'exple: fly bird ladies women) et je dois écrire un script qui compte l'occurrence de chaque mot!!!
    le résultat doit comprendre le calcul du singulier et le pluriel de chaque expression!! j'espère que vous comprenez mon problème!! étant donnée que j'ai pas une grande expérience dans les scripts shell je trouve pas mal de difficultés!! j'éspére que vous puissiez m'aider merci d'avance!!

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    mouais, pour moi, c'est pas encore limpide

    est-ce que tu peux nous montrer un échantillon de ce que tu as, et de ce que cela doit donner après traitement ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 4
    Par défaut
    en fait j'ai un fichier texte qui est organisé sur cette forme:
    fly plane walk man
    lady red men black
    liquid water ice solid
    wives ladies children son

    je dois alors compter les occurrences de chaque mot!
    j'ai fait un script qui lit ce fichier, il prend chaque expression il la cherche dans un fichier.db (il doit chercher le pluriel et le singulier du mot) puis il compte les resultats trouvés et stocke les résultats dans un fichier! ce dernier doit avoir la forme suivante:
    fly
    44
    plane
    31
    walk
    20
    man
    56
    lady
    39

    etc... et lorsque il donne 44 pour "fly" càd il a trouvé (par exple) 20 occurrences de "fly" et 24 occurrence de "flies"!!
    j'espère que c'est plus clair maintenant!
    merci!

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    echo "$(<auxalis.in)"
    fly plane walk man
    lady red men black
    liquid water ice solid
    wives ladies children son
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    echo "$(<auxalis.db)"
    fly flies
    plane planes
    walk walks
    man men
    lady ladies
    red reds
    black blacks
    liquid liquids
    water waters
    ice ices
    solid solids
    wife wives
    child children
    son sons
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/bin/bash
    #set -x
     
    declare -i m
    while read line; do dataBase+=( "$line" ); done<auxalis.db
     
    Check() {
       m=${2:-0}
       if [ "$1" = "${dataBase[m]% *}" ]; then
          match=ok
          DB+=( "${dataBase[m]}" )
          for (( y=m; y<${#dataBase[@]}; y++))
          do dataBase[y]="${dataBase[y+1]}"
          done
          unset dataBase[${#dataBase[@]}-1]
       fi
       [ -z "$match" -a $m -lt ${#dataBase[@]} ] && { ((m++));  Check "$1" $m; }
    }
     
    for word in $(<auxalis.in)
    do Check "$word"
    done
    for singplu in "${DB[@]}"
    do echo "$singplu : $(egrep -oc "${singplu% *}|${singplu#* }" auxalis.in)"
    done
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ./auxalis.bash
    fly flies : 1
    plane planes : 1
    walk walks : 1
    man men : 2
    lady ladies : 2
    red reds : 1
    black blacks : 1
    liquid liquids : 1
    water waters : 1
    ice ices : 1
    solid solids : 1
    ...
    ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

Discussions similaires

  1. Compter le nombre d'occurences d'un mot dans un texte
    Par AlexandraS dans le forum Langage
    Réponses: 13
    Dernier message: 26/03/2008, 09h12
  2. Nombre d'occurences d'un mot dans une phrase
    Par cirtey dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 07/05/2007, 21h01
  3. [PHP4] Nombre d'occurences d'un mot dans un fichier
    Par trihanhcie dans le forum Langage
    Réponses: 15
    Dernier message: 06/07/2006, 11h42
  4. Réponses: 26
    Dernier message: 06/06/2006, 23h15
  5. Réponses: 8
    Dernier message: 18/01/2005, 10h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo