help com pegar campos especificos e somar o valor

1. help com pegar campos especificos e somar o valor

Rafael Stein
rafaelstein

(usa Fedora)

Enviado em 10/05/2010 - 10:41h

Ola pessoal,
Será que alguem consegue me dar um help
fiz um script que gera 1 arquivo com umas 200 linhas de tempos em tempos com a sintaxe
rede;bytesin;bytesout

como eu poderia fazer para que ao gerar da proxima vez o arquivo eu pegue o campo bytesin do aquivo já gerado e somasse com o que eu vou gerei agora ( no caso teria que ser feito para o in e para o out) , sendo que tenho q fazer esse somatorio de acordo com respectiva rede.

Obrigado


  


2. Re: help com pegar campos especificos e somar o valor

Marcos Paulo Ferreira
Daemonio

(usa Slackware)

Enviado em 10/05/2010 - 17:27h

Você quer o campo bytesin de todas as 200 linhas do arquivo e somar com o que você vai gerar tanto pra in quanto pra out de acordo com uma rede específica? :S

Confuso né? Explique melhor se possível!

t+


3. Re: help com pegar campos especificos e somar o valor

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 10/05/2010 - 20:40h

linha_anterior=`tail -f1 nome_do_arquivo`
bytes_in_anterior=`echo $linha_anterior | cut -d; -f2`
bytes_ou_anterior=`echo $linha_anterior | cut -d; -f3`

ai soma ... tipo bytesin=`expr $bytesin + $bytes_in_anterior` e pronto



4. Re: help com pegar campos especificos e somar o valor

Rafael Stein
rafaelstein

(usa Fedora)

Enviado em 10/05/2010 - 21:18h

Daemonio,
isso mesmo...meu medo é que isso fiquei mt pesado...pq em 200 linhas eu tenho q pegar linha por linha e somar o anterior com o atual, sendo q o arquivo nunca estará em ordem , entao eu tenho q buscar, quebrar a linha, somar e atualizar...


5. Re: help com pegar campos especificos e somar o valor

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 10/05/2010 - 21:36h

Então ... são coisas distintas né ... uma coisa e vc ja fazer isso com o arquivo de 200 linhas, agora ... se seu processo pega os bytes in e bytes out a partir de agora e vai somando e colocando no fim do arquivo ... o tail -1 vai bem ... agora se a rede varia ... sugiro um grep antes (o grep é batuta ... rss ... rapidão msm)

Tipo

linha_anterior=`grep $rede nome_do_arquivo | tail -1`

... blz




6. Re: help com pegar campos especificos e somar o valor

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/05/2010 - 02:14h

Eu filtraria o arquivo com dois laços for.

Desviaria o resultado de cada rede para um unico arquivo temporario

Exibiria esse arquivo no terminal
E depois sobre escreveria o arquivo inicial com o conteúdo do arquivo temporário.


Ficaria medonho?? Sim... Mas...




#!/bin/bash
# Por ./.ronin
# http://wolferineblues.com

for REDE in $(cat arquivo | cut -d';' -f1 | uniq | sort); do

for INOUT in $(cat arquivo | grep $REDE); do

IN=$(echo $INOUT | cut d';' -f2)
OUT=$(echo $INOUT | cut d';' -f3)

let TOTAL_IN=IN+TOTAL_IN;
let TOTAL_OUT=OUT+TOTAL_OUT;

done

echo "${REDE};${TOTAL_IN};${TOTAL_OUT}" >> /tmp/arquivo

done

cat /tmp/arquivo | sed 's/;/ - /g'

cat /tmp/arquivo > arquivo

exit



7. Re: help com pegar campos especificos e somar o valor

Perfil removido
removido

(usa Nenhuma)

Enviado em 12/05/2010 - 02:46h

Pergunta:
Como é gerado este "arquivo"?

Se for com um script deixe para roda-lo depois do script que te passei anteriormente. Algo assim deverá ocorrer:


script_gera_arquivo >> arquivo

script_soma_in_out_arquivo > arquivo


Assim terás um somatório atualizado, pois terás os registros anteriores mais os registros mais recentes para posterior soma.





8. Re: help com pegar campos especificos e somar o valor

DAVISON MARCEL PASQUALINI
fdmarp

(usa Debian)

Enviado em 12/05/2010 - 22:01h

Cara,
Acho que entendi o que voce quer ... se o sed -i funcionar no seu SO ... segue uma solução.




# Essa parte são os dados que voce vai passar
rede="cde"
bytesin=100
bytesout=200

# Daqui pra baixo eh o codigo ... meu arquivo chama teste
i='$2'
o='$3'
r='$1'
comando=`echo "awk -F\; '/^$rede/{ print $r\";\"$i + $bytesin\";\"$o + $bytesout }' teste"`
resultado=`eval $comando`

eval sed -i \'s/$rede.*/$resultado/\' teste






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts