Salut tout le monde , je me lance sur de petits scripts en bash , et je suis déjà bloqué a ma première tentative . Depuis hier matin je galère a trouver la solution .
je voudrais simplement extraire le nombre de mots utilisant chaque lettre de l’alphabet de A à Z . le script devra prendre comme paramètre le nom du fichier à analyser .
#!/bin/bash
var2=`egrep [A] && wc -l ~/Bureau/bin/dicotoutcourt`
if [ -z $1 ] || [ $1 != 'dicotoutcourt' ]; then
echo " tu n'as pas taper le parametre ! "
else
echo "$var2"
fi
ce qui me rends rien , et je ne vois plus mon nom@hoste$ comme si le script faisait quelque chose mais ne me renvoyait rien
comment faire pour affichier le resultat de var 2 ? ( je sais que je dois le faire de [a-z] mais s’était juste pour savoir si la méthode marchait . ( ou courait ?..) si vous auriez une suggestion je suis preneur , juste une piste :x
#!/bin/bash
if [ -z $1 ] || [ $1 != 'dicotoutcourt' ]; then
echo " tu n'as pas tapé le paramètre ! "
else
var2=`egrep [A] ~/Bureau/bin/dicotoutcourt && wc -l ~/Bureau/bin/dicotoutcourt`
echo "$var2"
fi
me rend : 323577 /user./user./user./dicotoutcourt merci quand même
edit : j’ai rien dit , c’est juste le wc -l que j’ai obtenu , pas le egrep [A] . Je continu mes recherches .
Edit : c’est bon , j’ai regardé le man et vu qu’il fallait ajouté l’option -c a grep pour qu’il puisse compter le nombre d’occurence … soucis réglé . vais fumer la clope de la victoire du débutant .
j’reviens vite pour un autre probleme de noob .
:corrigé :
#!/bin/bash
if [ -z $1 ] || [ $1 != 'dicotoutcourt' ]; then
echo " tu n'as pas taper le parametre ! "
else
var1=` grep -o -c A ~/Bureau/bin/dicotoutcourt && wc -l ~/Bureau/bin/dicotoutcourt `
echo "$var1"
fi
au début, tu fais un test sur l’argument ($1) pour regarder s’il est vide, ou s’il n’est pas égal à ‘dicotoutcourt’. Mais tu ne fais jamais référence à cet argument dans la suite du script.
Ta var1 mélange les choses:
-si tu veux compter le nombre d’occurrences de la lettre A dans le fichier dicotoutcourt: var1=$(grep -c A dicotoutcourt).
-si tu veux compter le nombre de mots qui contiennent la lettre A (pour ne pas compter 3 fois AAA par exemple) il va falloir passer par une expression régulière: var1=egrep "\b\w*A+\w*\b" dicotoucourt
Note: on considère que la syntaxe variable=<backquote>commande<backquote> est obsolète, et on lui préfère la syntaxe variable=$(commande). Je n’ai jamais regardé pourquoi.
En tout cas, enlève cette commande wc de ta variable, elle ne sert à rien à part calculer le nombre total de lignes dans ton fichier (et à fausser ta variable).
Sinon, c’est très bien d’avoir pensé à lire man grep et d’avoir repéré l’option -c, je vois beaucoup de personnes qui utilisent des trucs comme grep $PATTERN $FICHIER | wc -l au lieu d’un grep -c $PATTERN $FICHIER (ou pire, les gens qui écrivent cat $fichier | grep $pattern )
pour ce qui est des Backquote , incroyable . je te disais justement sur l’autre topic que tu les avais oublié et je comprenais pas pourquoi tu metais un $ au début , mais là je comprends bien mieux , c’est pas facile de trouver ( pas d’apprendre , mais de trouver ) sur le net des personnes ou des ressources ( ou je ne sais pas du tout chercher malheureusement ) qui expliquent toutes ces choses là . j’espère que je suis pas en retard , je viens de savoir ça .
pour le grep -E ou le egrep … j’avais tout essayé snifff mdrr , jte jure [A-Z ] [A…Z] [A.Z] et tout plein de truck , mais aucuns site n’expliquait que pour faire des “Et” dans grep -E il fallait utilisé la syntaxe '\ \ * + *" . maintenant je sais .
qu’est ce que je peux dire de plus à par remercier ton analyse trés pertinente et corroborée .
: édit : tu m"as bien fait rire avec le Cat $fichier | grep $pattern car je le faisais aussi au début , par manque de connaissances . on apprend n’importe quoi sur le net
édit2: Pour les variables , le “$” remplaçant les backquotes , ça s’applique seulement aux variables ? et la syntaxe est toujour $+(commande) ? merci de prendre de ton temps .