2009-10-31 6 views
0

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 message "Missing" apparaît. Voici le script:Script pour compter les mots correspondant au motif C shell

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

Répondre

3

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

Si vous voulez juste pouvoir compter plusieurs occurrences sur une seule ligne (puisque grep -c ne compte que des lignes qui ont au moins un match), utilisez tr pour changer les espaces normal de nouvelles lignes (vous pouvez utiliser grep -c) :

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

En outre, scripting csh is usually going to cause more problems than it is worth. En dépit de leurs propres bizarreries historiques, les obus de Bourne sont beaucoup plus agréables à écrire. Aller pour dash si vous voulez vous assurer que votre code est portable. Aller avec bash, ksh, ou zsh si vous avez besoin de plus de puissance.

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

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

C'est exactement ce dont j'ai besoin Chris. J'essayais d'y parvenir en utilisant pour la boucle pour diviser chaque ligne en une ligne de mots, que d'utiliser egrep, mais la commande tr semble être beaucoup plus facile. C'est mon premier script, et malheureusement je dois utiliser C shell, car c'est celui qu'ils utilisent à uni. Dans le futur, je passerai définitivement à bash ou korn. – Mike55

+1

Même si votre shell de connexion est 'csh', vous pouvez toujours écrire des scripts dans d'autres shells/langues. Si on ne vous a pas dit que vous devez utiliser 'csh' pour les scripts, vous devriez pouvoir trouver un shell Bourne comme'/bin/sh' sur n'importe quel système Unix-OID installé au cours des deux dernières décennies. Si, pour une raison quelconque, vous finissez par écrire des scripts dans 'csh', consultez le lien que j'ai inclus dans ma réponse, cela pourrait vous aider à éviter les problèmes et/ou vous empêcher de tomber dans quelque chose de complètement impossible' csh'. –

+0

Ils nous ont demandé d'écrire tous les scripts dans C shell, parce que les notes de cours ont été écrites pour C, mais nous devons expliquer quel code doit être modifié pour le faire fonctionner sur bash. – Mike55