data.now:
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=92 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=92 Auto_save__of__retention__data__completed=1 Warning___Return=68 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=14 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=93 Auto_save__of__retention__data__completed=1 Warning___Return=68 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=93 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=92 Auto_save__of__retention__data__completed=1 Warning___Return=8 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=73 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=99 Auto_save__of__retention__data__completed=1 Warning___Return=68 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=93 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=75 Auto_save__of__retention__data__completed=1 Warning___Return=38 PASSIVE__SERVICE__CHECK_=53 ,1026--1313,1
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,on__host=21 SERVICE__ALERT_=51 Warning___The__results__of__service=16 Warning___on__host=12 Auto_save__of__retention__data__completed=1 Warning___Return=28 PASSIVE__SERVICE__CHECK_=23 ,1026--1313,1[/CODE]
Os campos em cada linha acima são separados por "vírgula". O que me interessa é o campo 9.
O campo 9 tem vários valores.
O que eu quero fazer é duas partes:
-
Ser capaz de somar todos os valores de um padrão específico em todas as linhas no arquivo de dados. Por exemplo, se eu quiser saber o valor total "on__host" em todas as linhas no arquivo de dados.
-
Ser capaz de somar todos os valores de todos os padrões em cada linha, em todas as linhas no log.
Havia um dado antigo com o qual eu estava trabalhando, o qual tinha apenas um único valor no nono campo. isso era fácil de manusear. Os dados ficaram assim:
data.prev
blah1,dah,blaha,sweet,games.log,5297484456,nagios-toin,529748456,53,1026--1313,1
E tudo que eu precisava fazer para somar os valores no 9º campo de todas as linhas era:
awk -F, 'BEGIN{sum=0} {sum+=$9} END {print sum}' data.prev
O tipo de script que resolveria esse problema para mim seria assim:
#!/bin/sh
Pattern=$1
if [ "${Pattern}" = "allpatterns" ] ; then
awk should add up all the values in the 9th field of data in data.now
else
if the user did not specify "allpatterns", then, awk should take the pattern name specified by the user and use that to decide which pattern to add up in the 9th field of all the lines.
awk -F"," '$9 ~ /'${Pattern}'/ '{do awk magic}' -- this is just an idea.
fi
espera-se que este script seja executado em todos os sistemas unix. O shell que eu vou usar é / bin / sh ou / bin / bash.
Para a primeira parte do meu pedido, se todos os valores de todos os padrões em todas as linhas no arquivo de dados forem somados, a saída deve ser apenas a soma resultante dos números ... ou 504 (apenas um valor arbitrário). número eu escolhi).
Para a segunda parte da minha solicitação, se os valores de um padrão específico forem somados, a saída deverá ser apenas a soma resultante dos valores desse padrão específico ... ou seja, "on__host = 400".