[bash] Position d'un mot ds un fichier
Résolu
tibofx
Messages postés
14
Statut
Membre
-
jipicy Messages postés 41342 Statut Modérateur -
jipicy Messages postés 41342 Statut Modérateur -
Bonjour,
Je viens de passer pas mal de temps à écrémer les forums, mais je ne trouve pas de réponse à mon problème..que voici :
J'ai un fichier texte contenant un texte de la forme suivante :
windows 2 sun 1 descendent 5 ...fire 1... etc..
Et ce que je voudrais, c'est que si je cherche un mot, afficher le nombre qui le suit. Par exemple, ici : je cherche le mot "fire". Il est présent, donc j'affiche le nombre qui le suit, soit le 1.
Merci pour votre aide !
Tibo.
Je viens de passer pas mal de temps à écrémer les forums, mais je ne trouve pas de réponse à mon problème..que voici :
J'ai un fichier texte contenant un texte de la forme suivante :
windows 2 sun 1 descendent 5 ...fire 1... etc..
Et ce que je voudrais, c'est que si je cherche un mot, afficher le nombre qui le suit. Par exemple, ici : je cherche le mot "fire". Il est présent, donc j'affiche le nombre qui le suit, soit le 1.
Merci pour votre aide !
Tibo.
A voir également:
- [bash] Position d'un mot ds un fichier
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Fichier bin - Guide
- Fichier rar - Guide
- Creer un fichier .bat - Guide
6 réponses
Bonjour,
tu peux essayer en faisant un grep "tonMot" pour récupérer la ligne.
ensuite tu reconnait "tonMot" et tu prends le mot suivant.
ligne=`grep "$tonMot" tonFichier | head -1` //tu récupères la 1ere occurence
res=${ligne##*$tonMot } //tu supprimes le début de la ligne, le premier mot est alors le chiffre que tu cherche
set $(echo $res $1)
res=$(eval echo $1) // tu récupères le 1er mot
echo $res
C'est vraiment laid mais ca fonctionne...
--
Tøƒ
tu peux essayer en faisant un grep "tonMot" pour récupérer la ligne.
ensuite tu reconnait "tonMot" et tu prends le mot suivant.
ligne=`grep "$tonMot" tonFichier | head -1` //tu récupères la 1ere occurence
res=${ligne##*$tonMot } //tu supprimes le début de la ligne, le premier mot est alors le chiffre que tu cherche
set $(echo $res $1)
res=$(eval echo $1) // tu récupères le 1er mot
echo $res
C'est vraiment laid mais ca fonctionne...
--
Tøƒ
Merci pour ta réponse si rapide ! Cependant lors de la dernière assignation de la variable res, je suppose qu eça me coupe tout le contenu de res puisqu'ensuite il ne m'affiche absolument rien, ou plutot comme si c'était un retour chariot lorsque je j'affiche sa valeur.
Yes ! Merci beaucoup, c'est peut-être laid mais en effet c'est exactement ce que je voulais ! Quelle rapidité ! Merci beaucoup !
Salut,
Un peu à la bourre, mais... (Attention : Il ne faut pas d'espace entre les 2 premiers crochets ([) qui entourent le terme "digit" !!! Ici l'espace c'est pour contrer la mise en forme des balises < code > qui empêche un affichage correct (réservé) :
Un peu à la bourre, mais... (Attention : Il ne faut pas d'espace entre les 2 premiers crochets ([) qui entourent le terme "digit" !!! Ici l'espace c'est pour contrer la mise en forme des balises < code > qui empêche un affichage correct (réservé) :
$ echo $A windows 2 sun 1 descendent 5 ...fire 1... $ echo $A | grep -o "fire [0-9][0-9]*" | grep -o '[ [:digit:]]' 1 $ echo $A | egrep -o "windows [0-9][0-9]*" | grep -o '[ [:digit:]]' 2;-))
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Merci jipicy, c'est jamais trop tard pour apprendre ! Je ne suis pas encore sorti de l'auberge, donc tout est bon à prendre pour moi ! Merci encore j'ai vraiment besoin d'avancer dans ce domaine !
Un petit exemple supplémentaire avec "sed" cette fois :
$ echo "$A"
windows 2 sun 1 descendent 5 ...fire 1...
linux 6 bsd 4 aix 1 mac 3
firefox 2 thunderbird 1 sunbird 2
$ echo "$A" | sed -n '/.*fire \([0-9]\{1,\}\).*/ s//\1/p'
1
$ echo "$A" | sed -n '/.*linux \([0-9]\{1,\}\).*/ s//\1/p'
6
$ echo "$A" | sed -n '/.*bsd \([0-9]\{1,\}\).*/ s//\1/p'
4;-))