[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.
Configuration: Linux Firefox 2.0.0.11
A voir également:
- [bash] Position d'un mot ds un fichier
- Comment ouvrir un fichier epub ? - Guide
- Comment ouvrir un fichier bin ? - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier 7z - Guide
- Comment ouvrir un fichier dat - 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øƒ
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;-))