Cortando de tras para frente [RESOLVIDO]

1. Cortando de tras para frente [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 11:19h

Bom dia, pessoal
ja criei um topico aqui com minha antiga duvida que foi sanada. Porém encontrei um novo problema


Meus arquivos estão saindo tratados da seguinte maneira:

7959;Unspecified;D;A;0;UNKNOWN;
7967/s;201.82.139.105;D;N;A;5060;OK;25;ms;
7939/7939;172.31.16.128;D;A;5063;OK;48;ms;

Como vcs podem notar, existem casos em que o campo que eu quero pegar eh a 8 coluna, em outras linhas ele eh a setima e assim por diante.

Preciso pegar o campo que fica antes do segundo delimitador
Ex:
0;UNKNOWN; <- pegar o zero
25;ms; <- pegar o 25
48;ms; <- pegar o 48

Como eu faço pra recortar do final para o inicio? visto que do inicio para o final existem alguns problemas de alguns campos que podem ou nao ser preenchidos

grato



  


2. Re: Cortando de tras para frente [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 11:25h

Uma correçao, desculpe

No caso eu só preciso pegar o campo do tempo, qd o ULTIMO campo for 'MS', se o ultimo campo NÃO for ms, eu defino que o campo eh ZERO


3. Re: Cortando de tras para frente [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 25/02/2013 - 12:10h

detoniks escreveu:

Uma correçao, desculpe

No caso eu só preciso pegar o campo do tempo, qd o ULTIMO campo for 'MS', se o ultimo campo NÃO for ms, eu defino que o campo eh ZERO


Se o delimitador for sempre o mesmo, e se a posição da coluna for sempre a mesma, corta com o cut


4. Re: Cortando de tras para frente [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 12:12h

lcavalheiro escreveu:

detoniks escreveu:

Uma correçao, desculpe

No caso eu só preciso pegar o campo do tempo, qd o ULTIMO campo for 'MS', se o ultimo campo NÃO for ms, eu defino que o campo eh ZERO


Se o delimitador for sempre o mesmo, e se a posição da coluna for sempre a mesma, corta com o cut


Esse eh exatamente meu problema, nem sempre a coluna é a mesma, logo o cut -f8 que eu estava usando não se aplica a todos os casos, porem se eu cortasse do FINAL para o COMEÇO, ate daria certo, pq seria sermpre a segunda coluna de tras pra frente


5. Re: Cortando de tras para frente [RESOLVIDO]

Wellington Felix
wellingtonfelix

(usa Outra)

Enviado em 25/02/2013 - 12:47h

Funcionou aqui:

 cat arquivo.txt | rev | cut -f3 -d";" | rev  




6. Re: Cortando de tras para frente [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 12:56h

wellingtonfelix escreveu:

Funcionou aqui:

 cat arquivo.txt | rev | cut -f3 -d";" | rev  



Show cara, aparentemente ta certinho, vou testar melhor aqui pq soh testei em servidor com poucas chamadas
vlw


7. Re: Cortando de tras para frente [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 13:02h

detoniks escreveu:

wellingtonfelix escreveu:

Funcionou aqui:

 cat arquivo.txt | rev | cut -f3 -d";" | rev  



Show cara, aparentemente ta certinho, vou testar melhor aqui pq soh testei em servidor com poucas chamadas
vlw


Ta faltando alguma validação, vou citar um exemplo abaixo:

sgc;172.31.0.65;N;5060;UNREACHABLE;

INSERT INTO PEERS (RAMAL, HOST , LATENCIA, STATUS) VALUES (sgc, 172.31.0.65, 5060, Online);


Se vc ver estou inserindo no lugar da latencia, a porta em uso =/ , como posso fazer uma validaçao pra do tipo

if (ultimo campo != "ms")
latencia=| rev | cut -f3 -d";" | rev

else
latencia = 0
fi

entendeu?


8. Re: Cortando de tras para frente [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 14:26h

Consegui ja, fiz desse modo

for i in $(sudo asterisk -rx 'sip show peers' | grep -v Name | grep -v Verbosity | grep -v peers | tr -s " " ";" | sed 's/[()]//g'); do

RAMAL=$(echo ${i} | cut -d";" -f1 | cut -d"/" -f1)
IP=$(echo ${i} | cut -d";" -f2)
LATENCIA=$(echo ${i} | rev | cut -f3 -d";" | rev)
VALIDALATENCIA=$(echo ${i} | rev | cut -f2 -d";" | rev)
TESTE=$(echo ${i} | cut -c 1-100)


if [ $VALIDALATENCIA == "ms" ];then
STATUS="Online"

else
STATUS="Offine"
LATENCIA=0
fi



9. Re: Cortando de tras para frente [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 14:46h

Outra duvida por favor

tenho arquivo com varias linhas, vou botar 2 de exemplo:

SIP/8127-000001c5;macro-dial;s;1;Up;AppDial;Outgoing;Line;8127;00:02:56;SIP/netfone-000001c4

SIP/netfone-000001c4;macro-dial;s;38;Up;Dial;SIP/8127,20,trMauto-blkv;204;00:02:56;SIP/8127-000001c5;


Eu preciso fazer o seguinte
1- Todas as linhas que não começarem com 'SIP' eu ignoro e pulo pra proxima
2- Todas as linhas que contenham 'Outgoing', eu tbm ignoro e pulo pra proxima

eu tentei dar um grep -i SIP, porem nao deu certo, alguem tem uma ideia?
vlw


10. Re: Cortando de tras para frente [RESOLVIDO]

Wellington Felix
wellingtonfelix

(usa Outra)

Enviado em 25/02/2013 - 15:00h

@detoniks

Fecha este tópico como resolvido, marque a melhor resposta e abra um novo. Isso ajuda na organização do fórum e fica mais fácil das pessoas ajudarem (e - também - obterem ajuda).


11. Re: Cortando de tras para frente [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 25/02/2013 - 15:04h

wellingtonfelix escreveu:

@detoniks

Fecha este tópico como resolvido, marque a melhor resposta e abra um novo. Isso ajuda na organização do fórum e fica mais fácil das pessoas ajudarem (e - também - obterem ajuda).


ok, tentei manter tudo no mesmo topico justamente pq achei que seria chato spamear topicos, estou fazendo isso, obrigado






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts