question sur "read" entre autres

question sur "read" entre autres - Shell/Batch - Programmation

Marsh Posté le 02-11-2002 à 19:44:14    

bonjour, je debute, donc j'ai qq petites questions :)
 
voila, je voudrais faire un petit script qui compte le nombre de fois qu'un mot apparait dans un fichier. mon probleme c'est que j'arrive à compter, mais quand je sors de ma boucle, mon compteur reprend la valeur 0.
 
##################################
##########
#compteur#
##########
# usage : compteur nom-du-fichier
 
#! /bin/sh
set -x
#compte=0
# disons qu'on cherche le "mot" #
grep \# $1 | while read ligne
  do
    let compte=`expr $compte + 1`
    echo $compte
  done
# et voila mon probleme...
echo compte vaut $compte
##################################
 
voila, je dois mal m'y prendre, y'a certainement plus simple (avec un grep?) mais je debute... merci de m'aider :)
 
 
ah oui et aussi : je n'ai pas trop compris le fonctionnement de la commande read. si on fait "cat $1 | while read mot", que vaudra $mot ?? est ce qu'il vaudra le 1er mot, puis le 2eme, puis le 3eme.... ou bien tous les mots de la 1ere ligne, puis ceux de la 2eme, puis.... ??
 
merci bcp car j'ai un peu de mal.

Reply

Marsh Posté le 02-11-2002 à 19:44:14   

Reply

Marsh Posté le 02-11-2002 à 20:46:38    

Vanik a écrit a écrit :

bonjour, je debute, donc j'ai qq petites questions :)
 
voila, je voudrais faire un petit script qui compte le nombre de fois qu'un mot apparait dans un fichier. mon probleme c'est que j'arrive à compter, mais quand je sors de ma boucle, mon compteur reprend la valeur 0.
 
##################################
##########
#compteur#
##########
# usage : compteur nom-du-fichier
 
#! /bin/sh
set -x
#compte=0
# disons qu'on cherche le "mot" #
grep \# $1 | while read ligne
  do
    let compte=`expr $compte + 1`
    echo $compte
  done
# et voila mon probleme...
echo compte vaut $compte
##################################
 
voila, je dois mal m'y prendre, y'a certainement plus simple (avec un grep?) mais je debute... merci de m'aider :)
 
 
ah oui et aussi : je n'ai pas trop compris le fonctionnement de la commande read. si on fait "cat $1 | while read mot", que vaudra $mot ?? est ce qu'il vaudra le 1er mot, puis le 2eme, puis le 3eme.... ou bien tous les mots de la 1ere ligne, puis ceux de la 2eme, puis.... ??
 
merci bcp car j'ai un peu de mal.




 
 


kneko@linux:/a-graver> cat > test
fdfsdf
sddsfdsfs
dffsd
toto
fdsfdsf
dsffdsf
fsdfsd
fdsfsd
fsd
toto
fdfdsf
dfssdfsd
fdssdfsd
toto
toto
fsdsfsd
fsdfsd
 
kneko@linux:/a-graver> grep toto test | wc -l
      4
kneko@linux:/a-graver>
kneko@linux:/a-graver> toto=`grep toto ./* | wc -l`
kneko@linux:/a-graver> echo $toto
4
kneko@linux:/a-graver>


 
moi pour compter les textes 'toto' dans tous les fichiers du repertoire courrant je ferrai ca :
 
#!/bin/sh
COMPTER=`grep toto ./* | wc -l`
echo $COMPTER
 
 
 
tout simplement....
 
ou  
 
#!/bin/sh
COMPTER=`grep $1 $2 | wc -l`
echo $COMPTER
 
donc paramettre 1 texte cherche
parametre 2 le/les fichiers a fouiller.


Message édité par kuroineko le 02-11-2002 à 20:48:46

---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Marsh Posté le 02-11-2002 à 21:23:41    

merci à toi pour ton aide. je venais justement pr dire que j'avais decouvert la commande wc :)
tu as mm etendu le truc pr plusieurs fichiers ds un rep... (moi c juste un seul fichier qui m'interesse)
mais il y a un probleme si le mot apparait 2 fois sur la mm ligne, il ne sera compté qu'une fois. donc je pense qu'il faudrait traiter le fichier mot à mot et nom ligne par ligne.
 
en fait, en plus, je voudrais faire ca pour chaque mot du fichier, donc j'aimerais eviter de recompter un mot qui est ecrit plusieurs fois. ca veut dire qqc ce que g dit là ? :D  :D  
 
merci de m'aider.

Reply

Marsh Posté le 02-11-2002 à 21:46:24    

une idée : si on remplace tous les caracteres d'espace par un retour charriot et qu'ensuite on fasse un wc -l, alors on aura le nombre exact de fois que le mot apparait dans le fichier.
donc g voulu essayer avec un sed -e s/\ /\\n/ (enfin un truc du genre) mais ca n'a pas marché.
 
aidez-moi s'il vous plait :(


Message édité par vanik le 02-11-2002 à 21:50:42
Reply

Marsh Posté le 03-11-2002 à 11:08:54    

Vanik a écrit a écrit :

une idée : si on remplace tous les caracteres d'espace par un retour charriot et qu'ensuite on fasse un wc -l, alors on aura le nombre exact de fois que le mot apparait dans le fichier.
donc g voulu essayer avec un sed -e s/\ /\\n/ (enfin un truc du genre) mais ca n'a pas marché.
 
aidez-moi s'il vous plait :(




 
c'est ta syntaxe du sed qui doit pas aller, mais la solution c'est bien ca...
verifies ta syntaxe ca doit suffir


---------------
[:kuroineko] Francois.P tel: (+33)617230820 http://www.ifrance.com/fpussault  fpussault@caramail.com
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed