[awk] unterminated string et espace

fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   -  
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je souhaite compter le nombre de fois qu'un mot apparait dans un fichier, il y a déjà un controle sur le mot mais même si le mot est faux (avec des espaces par exemple) cette validation doit aussi être faites :

word="hello world"
TEST="$(cat test.txt | grep ${word} | awk '{WO=$1} WO=="'${word}'" {NUM=NUM+1} END {print NUM}')"
echo ${TEST}


contenu de test.txt :
hello tout le monde (enfin tout facon ca matchera pas car on test $1 du awk)

Le problème est qu'il ne me génère une erreur là ou je souhaiterai qu'il ne me trouve juste rien.

Si vous avez une idée je suis tout ouïe :)

Merci

2 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Salut,

WO=="'${word}'"

C'est le contraire qu'il faut faire :
WO=='"${word}"'
0
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
 
Le contraire ne match rien du tout. Je souhaite quand même que ca fonctionne lorsque le mot est valide :

word="helloworld"
TEST="$(cat /home/apps/dm_admin/tmp/test.txt | awk '{WO=$1} WO=="'${word}'" {NUM=NUM+1} END {print NUM}')"
echo ${TEST}


contenu test.txt :
helloworld
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Quel est le but final ?
Trouvé juste le nombre d'occurrences d'un mot dans une texte ?
awk est obligatoire ?

Ta syntaxe contient des erreurs, déjà les quotes signalées plus haut et ta variable NUM définie nulle part ;-(
0
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
 
Oui je dois trouver le nombre d'occurence d'un mot dans un texte tout en évitant de générer une erreur si ma variable word contient un espace.

Si aucune occurence est trouve TEST sera vide. Ce n'est pas donc pas une erreur que "num" ne soit pas initialisé.

Si tu met dans la variable word la valeur "hello" et "x" fois hello dans test.txt tu verras que le code fonctionne (je viens de le retest). Bien entendu le bout de code doit être dans un fichier .sh
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
tout en évitant de générer une erreur si ma variable word contient un espace.
C'est à dire ??? T'as un exemple concret pour ça ?

Sinon:

grep -c 'hello' /home/apps/dm_admin/tmp/test.txt

Fait la même chose ;-))
0
fxtaa Messages postés 1050 Date d'inscription   Statut Membre Dernière intervention   74
 
Alors exemple simple, tu met un espace dans ma variable word : "hello world"
et awk renvoi à ce moment la :

awk: {WO=$1} WO=="hello 
awk:             ^ unterminated string


L'exemple que j'ai mis est pour faire simple, j'utilise awk car je contrôle plusieurs champs avec regexp etc... Mais pour faire simple j'ai remplacer la regexp par hello... c'est plus lisible ^^
0
zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 430
 
Et si tu tiens compte de ma remarque, il ne renvoie pas d'erreur ;-))

Dans ta syntaxe de base, awk recherche la chaine ' "hello word" ' guillemets compris, dans la mienne il cherche 'hello word' sans guillemets ;-\
0