[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 -
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 :
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
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
Le contraire ne match rien du tout. Je souhaite quand même que ca fonctionne lorsque le mot est valide :
contenu test.txt :
helloworld
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
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
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
Alors exemple simple, tu met un espace dans ma variable word : "hello world"
et awk renvoi à ce moment la :
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 ^^
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 ^^
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 ;-\
Dans ta syntaxe de base, awk recherche la chaine ' "hello word" ' guillemets compris, dans la mienne il cherche 'hello word' sans guillemets ;-\