0 votes

script pour compter les mots correspondant au motif C shell

J'ai écrit ce script qui compte les occurrences d'un motif particulier dans un fichier donné. Cependant, si le fichier texte contient des crochets ou des accolades, le shell affiche un message "Missing }". Voici le script :

#!/bin/csh
@ count=0
   foreach word ( `cat test` )
    if (`echo $word | egrep -c 'int'`) then
      @ count= $count + 1
    endif
   end
echo $count

3voto

Chris Johnsen Points 50064

Vous devez citer l'expansion de word : echo "$word" .

Si vous souhaitez simplement pouvoir compter plusieurs occurrences sur une seule ligne (puisque grep -c ne compte que les lignes qui ont au moins une correspondance), utilisez tr pour remplacer les espaces blancs normaux par des nouvelles lignes (alors vous puede utiliser grep -c ) :

(tr ' \t' '\n\n' | fgrep -c int) < test

En outre, écriture csh est généralement source de plus de problèmes qu'elle n'en vaut la peine . Malgré leurs bizarreries historiques, les shells Bourne sont beaucoup plus agréables à script. Allez-y pour dash si vous voulez vous assurer que votre code est portable. Allez-y avec bash , ksh o zsh si vous avez besoin de plus de puissance.

csh% echo "foo \"bar\" \$ dollar"
csh: Unmatched ".

sh$ echo "foo \"bar\" \$ dollar"
foo "bar" $ dollar

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X