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