Duvida AWK [RESOLVIDO]

1. Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 13:04h

Boa tarde pessoal, sou novo no forum e já dei uma lida e achei muita coisa interessante por aqui, porém estou apanhando um pouco de shell script.

Tenho um arquivo texto com o seguinte conteudo:
Name/username Host Dyn Nat ACL Port Status
1122 (Unspecified) D A 5060 UNKNOWN
1234 (Unspecified) D N A 5060 UNKNOWN
7777 (Unspecified) D A 5060 UNKNOWN
9990 (Unspecified) D N A 5060 UNKNOWN
9994 (Unspecified) D A 5060 UNKNOWN
9995/9995 172.31.16.104 D N A 5063 OK (20 ms)
9996 (Unspecified) D N A 5060 UNKNOWN
9997 (Unspecified) D N A 5060 UNKNOWN
9998 (Unspecified) D N A 5060 UNKNOWN
9999 (Unspecified) D A 5060 UNKNOWN
10 sip peers [Monitored: 1 online, 9 offline Unmonitored: 0 online, 0 offline]


Eu preciso cortar este arquivo em colunas (somente coluna 1,2 e 7) e inserir no banco. Para futuramente tratar com PHP.

Alguém pode me dar uma ajuda de como faço o script?
Tentei algumas coisas aqui de algo que achei na net porém todos deram erro.
Se alguem puder me dar uma dica fico grato

obrigado


  


2. Re: Duvida AWK [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 21/02/2013 - 13:23h

detoniks escreveu:

Boa tarde pessoal, sou novo no forum e já dei uma lida e achei muita coisa interessante por aqui, porém estou apanhando um pouco de shell script.

Tenho um arquivo texto com o seguinte conteudo:
Name/username Host Dyn Nat ACL Port Status
1122 (Unspecified) D A 5060 UNKNOWN
1234 (Unspecified) D N A 5060 UNKNOWN
7777 (Unspecified) D A 5060 UNKNOWN
9990 (Unspecified) D N A 5060 UNKNOWN
9994 (Unspecified) D A 5060 UNKNOWN
9995/9995 172.31.16.104 D N A 5063 OK (20 ms)
9996 (Unspecified) D N A 5060 UNKNOWN
9997 (Unspecified) D N A 5060 UNKNOWN
9998 (Unspecified) D N A 5060 UNKNOWN
9999 (Unspecified) D A 5060 UNKNOWN
10 sip peers [Monitored: 1 online, 9 offline Unmonitored: 0 online, 0 offline]


Eu preciso cortar este arquivo em colunas (somente coluna 1,2 e 7) e inserir no banco. Para futuramente tratar com PHP.

Alguém pode me dar uma ajuda de como faço o script?
Tentei algumas coisas aqui de algo que achei na net porém todos deram erro.
Se alguem puder me dar uma dica fico grato

obrigado


Esse arquivo é gerado automaticamente (tipo a saída de algum comando) ou foi você quem o digitou?


3. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 13:52h

Este arquivo txt eu criei manualmente (ctrl c , ctrl v) para testar, mas ele é resultado de outro comando que eh: asterisk -r (ai ele abre o console do asterisk) e dentro do console eu digito (sip show peers) que me lista esse arquivo.

O valor desse arquivo eh alterado com frequencia, depois vou pensar em um jeito para que quando eu clique no meu botão "Gerar Log" feito em php, ele mande este comando por shell exec, que execute um script que da o comando "sip show peers" e depois corta e insere no banco para eu conseguir exebir na tela.

Deu pra entender amigo?


4. Re: Duvida AWK [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 21/02/2013 - 13:59h

detoniks escreveu:

Este arquivo txt eu criei manualmente (ctrl c , ctrl v) para testar, mas ele é resultado de outro comando que eh: asterisk -r (ai ele abre o console do asterisk) e dentro do console eu digito (sip show peers) que me lista esse arquivo.

O valor desse arquivo eh alterado com frequencia, depois vou pensar em um jeito para que quando eu clique no meu botão "Gerar Log" feito em php, ele mande este comando por shell exec, que execute um script que da o comando "sip show peers" e depois corta e insere no banco para eu conseguir exebir na tela.

Deu pra entender amigo?


Deu sim. Eu não conheço o asterisk, mas na manpage dele tem alguma opção que permita escolher o caractere de delimitação de colunas? Tipo o ; no exemplo a seguir
Nome1;Nome2;Nome3
velha;trem;matou morreu

A coluna 3 seria
Nome3
matou morreu

Sacou o plano?


5. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 14:02h



Deu sim. Eu não conheço o asterisk, mas na manpage dele tem alguma opção que permita escolher o caractere de delimitação de colunas? Tipo o ; no exemplo a seguir
Nome1;Nome2;Nome3
velha;trem;matou morreu

A coluna 3 seria
Nome3
matou morreu

Sacou o plano?[/quote]


Entendi, cara , desconheço se posso mudar o delimitador de espaço para ";"

No caso da ultima coluna que falei, onde ele vai listar em alguns casos "OK (20 ms)" eu pretendia usar um CUT para tratar isso. Pois essa coluna se refere se o ramal esta online e a latencia dele


6. Re: Duvida AWK [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 21/02/2013 - 14:04h

A idéia de usar um caractere de delimitação de colunas é justamente viabilizar o uso do cut. Imagine, por exemplo, que as colunas no seu caso sejam separadas por espaços. Se não for o mesmo número de espaços, usar o cut vai ser uma dor de cabeça e tanto, sacou?

Outra saída é ver se o asterisk gera uma coluna por vez.


7. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 14:07h

O resultado mostrado na tela do console só vem nesse formato mesmo =/
Só se eu pegar esse resultado, gerar um arquivo com ele e der um SED para substituir espaços por algum delimitador.

Mas nesse caso acho que não vai precisar.

Só queria cortar mesmo, bem simples


8. Re: Duvida AWK [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 21/02/2013 - 14:11h

detoniks escreveu:

O resultado mostrado na tela do console só vem nesse formato mesmo =/
Só se eu pegar esse resultado, gerar um arquivo com ele e der um SED para substituir espaços por algum delimitador.

Mas nesse caso acho que não vai precisar.

Só queria cortar mesmo, bem simples


Essa idéia do sed é boa. No final das contas é meio que dar a volta ao mundo só pra sair da sala pra cozinha, mas vai funcionar.


9. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 14:17h

lcavalheiro escreveu:

detoniks escreveu:

O resultado mostrado na tela do console só vem nesse formato mesmo =/
Só se eu pegar esse resultado, gerar um arquivo com ele e der um SED para substituir espaços por algum delimitador.

Mas nesse caso acho que não vai precisar.

Só queria cortar mesmo, bem simples


Essa idéia do sed é boa. No final das contas é meio que dar a volta ao mundo só pra sair da sala pra cozinha, mas vai funcionar.



Mas não vejo necessidade, pq tipo
Se eu cortar as colunas como quero acredito que o resultado final sera esse:


Name/username Host Status
1122 (Unspecified) UNKNOWN
1234 (Unspecified) UNKNOWN
9995/9995 172.31.16.104 OK (36 ms) <-- aqui tenho duvida se ele vai contar o "(36 "e o ms
9996 (Unspecified) UNKNOWN

Mas gostaria que no final ele fosse inserindo assim

echo "INSERT INTO TABELA (nome, username, host, status) values ($variavel_nome, $variavel_username, $variavel_host, $variavel_status);

sacou?


10. Re: Duvida AWK [RESOLVIDO]

Luís Fernando C. Cavalheiro
lcavalheiro

(usa Slackware)

Enviado em 21/02/2013 - 14:18h

detoniks escreveu:

lcavalheiro escreveu:

detoniks escreveu:

O resultado mostrado na tela do console só vem nesse formato mesmo =/
Só se eu pegar esse resultado, gerar um arquivo com ele e der um SED para substituir espaços por algum delimitador.

Mas nesse caso acho que não vai precisar.

Só queria cortar mesmo, bem simples


Essa idéia do sed é boa. No final das contas é meio que dar a volta ao mundo só pra sair da sala pra cozinha, mas vai funcionar.



Mas não vejo necessidade, pq tipo
Se eu cortar as colunas como quero acredito que o resultado final sera esse:


Name/username Host Status
1122 (Unspecified) UNKNOWN
1234 (Unspecified) UNKNOWN
9995/9995 172.31.16.104 OK (36 ms) <-- aqui tenho duvida se ele vai contar o "(36 "e o ms
9996 (Unspecified) UNKNOWN

Mas gostaria que no final ele fosse inserindo assim

echo "INSERT INTO TABELA (nome, username, host, status) values ($variavel_nome, $variavel_username, $variavel_host, $variavel_status);

sacou?


Faz assim então: separa cada coluna em um arquivo diferente e usa o paste pra juntar as colunas. O paste pode pegar arquivos em colunas e colá-los em linhas.


11. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 14:21h

A idéia eh boa, porem ficaria inviavel para o proximo script.
Que vai ser parecido com esse, porem com outros resultados que tem muitas colunas


12. Re: Duvida AWK [RESOLVIDO]

Victor
detoniks

(usa Debian)

Enviado em 21/02/2013 - 14:47h

Cavaleiro,

achei algo na net que talvez ajude, aparentemente ele ja da o comando e substitui pelo delimitador ";"

Ta assim:

#!/bin/sh

for i in $(asterisk -rx 'sip show peers' | grep -v Name | grep -v Verbosity | grep -v peers | tr -s " " ";"); do

RAMAL=$(echo ${i} | cut -d";" -f1 | cut -d"/" -f1)
CHECK=$(echo ${i} | cut -d";" -f2)

if [ $CHECK = "(Unspecified)" ];then
echo ${RAMAL} Online
else
echo ${RAMAL} Offine
fi

done


Soh que não ta funcionando =/



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts