OVH Cloud OVH Cloud

[script]

5 réponses
Avatar
Samuel
Bonjour,

petite question sur GREP :
Je cherche à additionner le résultat d'une sortie de GREP, genre :

grep 15* /var/log/mainlog

Je récupère :

158
153
155

Et je voudrais avoir la somme (466), c'est possible ?
Tout cela en une seule ligne de commande, genre :

grep 15* /var/log/mainlog|count

merci d'avance.
Samuel.

5 réponses

Avatar
Basile Starynkevitch [news]
On 2004-12-13, Samuel wrote:
Bonjour,

petite question sur GREP :
Je cherche à additionner le résultat d'une sortie de GREP, genre :

grep 15* /var/log/mainlog

Je récupère :

158
153
155

Et je voudrais avoir la somme (466), c'est possible ?
Tout cela en une seule ligne de commande, genre :



Il convient d'utiliser AWK (ou gawk) pour ca:


awk '/^15[0-9]*/{sum += $1}; END{print sum}' /var/log/mainlog

(sans garantie, je n'ai pas testé). Mais awk a été conçu pour ce genre
de choses. On peut aussi utiliser Ruby ou Perl.


--
Basile STARYNKEVITCH http://starynkevitch.net/Basile/
email: basile<at>starynkevitch<dot>net
aliases: basile<at>tunes<dot>org = bstarynk<at>nerim<dot>net
8, rue de la Faïencerie, 92340 Bourg La Reine, France

Avatar
Stephane Chazelas
2004-12-13, 14:25(+01), Samuel:
Bonjour,

petite question sur GREP :
Je cherche à additionner le résultat d'une sortie de GREP, genre :

grep 15* /var/log/mainlog

Je récupère :

158
153
155

Et je voudrais avoir la somme (466), c'est possible ?
[...]


Utilise awk a la place.

Note que grep 15* ne fait probablement pas ce que tu veux.
D'abord, ca sera interpreté par le shell. S'il trouve des
fichiers dont le nom commence par 15 (exemple: 15 - toto.mp3),
il remplacement 15* par la liste de ces fichiers. Sinon il
passera 15* a grep. Les /patterns/ de grep sont des expressions
rationnelles, ce n'est pas la meme syntaxe que les patterns du
shell.

Pour grep, 15* veut dire un 1 suivi d'un nombre quelconque de
5s n'importe ou sur la ligne, donc par exemple, ca matchera 21
qui contient un 1 suivi de 0 5.

Essaie:

awk '/^15/ { sum += $0 } END { print sum }'

ou

awk '0+$0 >= 150 && 0+$0 < 160 { sum += $0 } END { print sum }'

--
Stephane

Avatar
Laurent Wacrenier
Samuel écrit:
grep 15* /var/log/mainlog


Je ne pense pas que le motif fasse ce que tu en attends.

Je récupère :

158
153
155

Et je voudrais avoir la somme (466), c'est possible ?


awk '/15*/ { sum += $0 } END { print sum }' /var/log/mainlog

Avatar
Samuel
merci à tous pour votre aide.

En fait je cherche à faire des stats sur du traffic par port, j'utilise
iptables pour cela (après avoir matché en ACCEPT les règles) :

iptables -L -v -x|grep smtp|grep "-- ...[0,9] eth3"|cut -d"A" -f1

C'est pas fini et pas joli ...

Quand ce script sera fini, Je récupère donc par exemple mes valeurs :

104526
85693
12378

Et je souhaite donc en faire la somme.

Merci.
Samuel.
Avatar
Sam
Merci à tous, ça fonctionne.

Samuel.