[ksh] - Compter le nombre d'occurence d'1 mot

Résolu
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,

Je bloque sur un problème qui semble assez simple, et j'aurais besoin de votre aide.

En fait, il faudrait que je compte le nombre d'occurence d'un mot dans un fichier XML, sachant que le mot peut-être présent plusieurs fois sur une ligne.

Exemple :
<CLIENT></CLIENT><CLIENT></CLIENT>
<CLIENT></CLIENT>

<CLIENT> présent 3 fois.

J'ai fait une ligne pas très propre qui à l'air de fonctionner, mais avez-vous une idée "plus simple" :

cat test.xml | tr '>' '\n' | grep "<CLIENT" | wc -l


On peux aussi le faire en perl, mais si possible sur une seule ligne dans un script shell.

Merci à tous pour voter aide, et en espérant avoir été clair.

Cdlt,
A voir également:

4 réponses

jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,
grep -o "<CLIENT>"
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9
 
Bonjour jipicy,

J'avais trouvé cette solution, mais le problème, c'est que le grep dont je dispose n'a pas l'option [-o] :-(

Merci beaucoup pour ton aide
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Quelle version tu as ?
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
C'est la version 1.2 je pense (mais pas sûr). Je suis sur Sun OS 5.10 ...
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
Arf ;-((

Donc à part ta moulinette ou celle de dubcek ci-dessous avec "awk", pas d'autres solutions ;-(
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Ok ...

Merci beaucoup pour ton aide.

A bientôt
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
une méthode, on compte le nombre de substitutions
$ cat a1
<CLIENT></CLIENT><CLIENT></CLIENT>
<CLIENT></CLIENT>

$ awk -v v="<CLIENT>" '{x+=gsub(v, "")} ; END {print x}'< a1
3
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9
 
Bonjour dubcek,

Merci beaucoup pour l'idée, elle me plait bien, mais j'ai un message d'erreur lorsque je lance la commande :

~/mathieu/test> awk -v v="<CLIENT>" '{x=x+gsub(v, "")} ; END {print x}'< test.xml
awk: syntax error near line 1
awk: bailing out near line 1


Merci
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
si Solaris ne connait pas grep -o, il ne connait pas non plus awk -v sauf avec nawk ou /usr/xpg4/bin/awk
essaye
awk '{x+=gsub(v, "")} ; END {print x}' v="<CLIENT>"
peut-être qu'il ne connait pas gsub, utilise alors nawk
0
gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   9
 
Super avec /usr/xpg4/bin/awk cela fonctionne.

Merci à tous les deux pour votre aide.
0
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637 > gorkimat Messages postés 70 Date d'inscription   Statut Membre Dernière intervention  
 
Sur Solaris, je te conseille d'utiliser plutôt nawk (new awk) si jamais
0