Je suis bloqué sur un petit script de debutant


#1

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 :confused:

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


#2

Re ! Je crois bien avoir trouvé mouahahah

#!/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 :slight_smile: 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 . :smiley:

: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

#3

Bonjour,

quelques remarques, à la volée:

  • 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 :sleepy: )


#4

Mes re-salutation Sputnik .

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 :frowning: .

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 :confused:
é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 .


#5

Salut morpheus,

ça ne changera pas grand chose au script, mais accessoirement avec “Tu”, “tapé” et “paramètre” ça ne devrait pas lui faire de mal non plus. :wink:


#6

Salut tfc , effectivement ça piquera moins les yeux :rofl: . Bien vue ^^