Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

1. Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Josevaldo Batista
duh182182

(usa Debian)

Enviado em 01/12/2019 - 11:55h

Bom dia a todos,

Estou tentando inserir um valor dentro de um colchete, eu tenho esse valor dentro de um arquivo .txt. Esse valor eu coleto de outro sistema e salvo em txt para referencia. O valor é dinâmico, mais por exemplo o valor 82 gostaria que ficasse da seguinte forma [82] Dessa forma eu posso coletar via http em um sistema de monitoramento. Da forma que toda vez que o valor for atualizado eu tenha o valor dentro do colchetes sem que adicione varias linhas dos valores anteriores

eu tentei o seguinte comando:
awk '{print "[" $ "]" }' teste.txt
resultado [82

tentei esse outro comando
awk '{print "["$1"]" }' teste.txt
resultado ]82

O valor teria que ficar da seguinte forma [82] dentro do arquivo txt

Grato se alguém auxiliar.








  


2. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 01/12/2019 - 15:45h


Boa tarde.
Vamos ver se entendi.
A dificuldade é para gravar , por exemplo,
[82], no arquivo TXT?
Você tem esse valor em uma variável?

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


3. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Josevaldo Batista
duh182182

(usa Debian)

Enviado em 01/12/2019 - 20:13h



Caro msoliver,

Eu uso esse comando para coletar a informação pelo Debian via SSH em um servidor RouterOS da seguinte forma:
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1} > /var/www/html/teste.txt
Vamos supor que o valor retornado dentro do aquivo teste.txt foi o valor 82 ( quantidade de pppoe-client na quele momento da consulta )

Com esse comando eu coleto o valor que refere-se a quantidade de pppoe em cima de tal pppoe-server e salvo em um arquivo txt nesse caso teste.txt
Os valores são dinamicos do pppoe-server porque sempre um pppoe-client se desconecta e reconecta.

A dificuldade é colocar esse resultado entre colchete, para quando eu verificar o arquivo teste.txt ele esteja da seguinte forma [82]

Não sei se foi claro ao explicar

Atenciosamente,






4. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Ryuk Shinigami
Ryuk

(usa Nenhuma)

Enviado em 01/12/2019 - 21:24h

Testa aí:
sed -i -r 's/[0-9]+/[&]/' arquivo.txt 



5. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Josevaldo Batista
duh182182

(usa Debian)

Enviado em 02/12/2019 - 02:49h

Deu certo sim meu rei.

Eu fiz da seguinte forma:

ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1} > /var/www/html/teste.txt ; sed -i -r 's/[0-9]+/[&]/' teste.txt
o resultado foi [82] perfeito

Porem fazendo isso via terminal o resultado é positivo. Mais se eu criar um aquivo sh da seguinte forma para que a crontab -e execute script a cada 15 segundos o resultado não aparece com os colchetes, mais via terminal sim.

#!/bin/bash

ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1} > /var/www/html/teste.txt ; sed -i -r 's/[0-9]+/[&]/' teste.txt



na crontab -e esta da seguinte forma
* * * * * sleep 15 && sh /var/www/html/./mk.sh ( mk é o nome do script )


Mesmo logado como root para acessar a crontab -e dando permissão ao aquivo chmod +x /var/www/http/mk.sh não funciona, pelo terminal funciona perfeitamente

Vi aqui no forum que muitos passaram por isso, eu já tentei as dicas que foram informada em outros tópicos, mais sem resultado, como tty, rever o caminho etc.








6. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 02/12/2019 - 16:30h


duh182182 escreveu:



Caro msoliver,

Eu uso esse comando para coletar a informação pelo Debian via SSH em um servidor RouterOS da seguinte forma:
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1} > /var/www/html/teste.txt
Vamos supor que o valor retornado dentro do aquivo teste.txt foi o valor 82 ( quantidade de pppoe-client na quele momento da consulta )

Com esse comando eu coleto o valor que refere-se a quantidade de pppoe em cima de tal pppoe-server e salvo em um arquivo txt nesse caso teste.txt
Os valores são dinamicos do pppoe-server porque sempre um pppoe-client se desconecta e reconecta.

A dificuldade é colocar esse resultado entre colchete, para quando eu verificar o arquivo teste.txt ele esteja da seguinte forma [82]

Não sei se foi claro ao explicar
Atenciosamente,

Boa tarde.
Foi bastante claro....
Segue:
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1}|sed 's/[0-9]\+/[&]/' > /var/www/html/teste.txt  

Ou
#Pode usar "$0" ou "$1", print ou printf.....
#No caso do printf:
#echo "13"|awk '{printf "[%s]" ,$0}'
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1}|awk '{print "["$0"]"}' > /var/www/html/teste.txt  

Ou
#Considerando que a saída do comando "ssh.....", sempre é um número, não é necessário "casar" o número, casa o conteúdo!
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1}|sed 's/.*/[&]/' > /var/www/html/teste.txt  


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


7. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 02/12/2019 - 16:44h


duh182182 escreveu:

Deu certo sim meu rei.

Eu fiz da seguinte forma:

ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1} > /var/www/html/teste.txt ; sed -i -r 's/[0-9]+/[&]/' teste.txt
o resultado foi [82] perfeito

Porem fazendo isso via terminal o resultado é positivo. Mais se eu criar um aquivo sh da seguinte forma para que a crontab -e execute script a cada 15 segundos o resultado não aparece com os colchetes, mais via terminal sim.

#!/bin/bash

ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1} > /var/www/html/teste.txt ; sed -i -r 's/[0-9]+/[&]/' teste.txt



na crontab -e esta da seguinte forma
* * * * * sleep 15 && sh /var/www/html/./mk.sh ( mk é o nome do script )


Mesmo logado como root para acessar a crontab -e dando permissão ao aquivo chmod +x /var/www/http/mk.sh não funciona,
pelo terminal funciona perfeitamente

Vi aqui no forum que muitos passaram por isso, eu já tentei as dicas que foram informada em outros tópicos, mais sem resultado, como tty, rever o caminho etc.

Cron a cada 15 minutos:
*/15 * * * *  /var/www/html/./mk.sh 


Detalhe:
A saída do comando ssh..... e direcionada para o arquivo " /var/www/html/teste.txt"
O comando sed:
sed -i -r 's/[0-9]+/[&]/' teste.txt
Esta manipulando o arquivo "teste.txt"
_____________________________________________________________________
Ví vários casos no fórum, sobre a necessidade de colocar o caminho completo no script
chamado pelo cron, exemplo:
no lugar de sed, coloque /bin/sed
Esse "caminho" é obtido com o comando
which sed
______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


8. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Josevaldo Batista
duh182182

(usa Debian)

Enviado em 02/12/2019 - 19:46h

Passando o resultado da contribuição do colega,

Fiz todos os testes possíveis com as devidas informações que vocês passaram. O que foi notado ao realizar os testes foram, se eu usar o SED a cron não funciona, mesmo colocando o /bin/sed no script, busquei outros assuntos correlacionado e não vi solução para esse caso usando o SED.
A unica forma que deu resultado foi com AWK a crontab roda o mesmo caminho e o mesmo tem o resultado da forma com colchetes porem esse comando
|awk '{print "["$0"]"}' > /var/www/html/teste.txt  
so imprimi o valor da seguinte forma ]82 eu ja tinha comentado sobre isso logo no inicio do poste, eu tinha chegado a esse resultado que fica valor [82 ou ]82 mais não deu certo [82].
Obs: usei todos os demais comandos sugerido, obtive o valor sem os colchetes porem o agendamento não funciona, o único que funciona é o awk porem os colchetes ficam trocados.


9. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 02/12/2019 - 20:17h


duh182182 escreveu:

Passando o resultado da contribuição do colega,

Fiz todos os testes possíveis com as devidas informações que vocês passaram. O que foi notado ao realizar os testes foram, se eu usar o SED a cron não funciona, mesmo colocando o /bin/sed no script, busquei outros assuntos correlacionado e não vi solução para esse caso usando o SED.
A unica forma que deu resultado foi com AWK a crontab roda o mesmo caminho e o mesmo tem o resultado da forma com colchetes porem esse comando
|awk '{print "["$0"]"}' > /var/www/html/teste.txt  
so imprimi o valor da seguinte forma ]82 eu ja tinha comentado sobre isso logo no inicio do poste, eu tinha chegado a esse resultado que fica valor [82 ou ]82 mais não deu certo [82].
Obs: usei todos os demais comandos sugerido, obtive o valor sem os colchetes porem o agendamento não funciona, o único que funciona é o awk porem os colchetes ficam trocados.

Boa noite.
Execute o comando abaixo no terminal e poste a saída....
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1}|cat -A 


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


10. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Josevaldo Batista
duh182182

(usa Debian)

Enviado em 02/12/2019 - 22:11h

msoliver escreveu:


duh182182 escreveu:

Passando o resultado da contribuição do colega,

Fiz todos os testes possíveis com as devidas informações que vocês passaram. O que foi notado ao realizar os testes foram, se eu usar o SED a cron não funciona, mesmo colocando o /bin/sed no script, busquei outros assuntos correlacionado e não vi solução para esse caso usando o SED.
A unica forma que deu resultado foi com AWK a crontab roda o mesmo caminho e o mesmo tem o resultado da forma com colchetes porem esse comando
|awk '{print "["$0"]"}' > /var/www/html/teste.txt  
so imprimi o valor da seguinte forma ]82 eu ja tinha comentado sobre isso logo no inicio do poste, eu tinha chegado a esse resultado que fica valor [82 ou ]82 mais não deu certo [82].
Obs: usei todos os demais comandos sugerido, obtive o valor sem os colchetes porem o agendamento não funciona, o único que funciona é o awk porem os colchetes ficam trocados.

Boa noite.
Execute o comando abaixo no terminal e poste a saída....
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1}|cat -A 


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________





Fiz o resultado foi
84^M$ 




11. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Marcelo Oliver
msoliver

(usa Debian)

Enviado em 03/12/2019 - 01:22h


duh182182 escreveu:
Fiz o resultado foi
84^M$ 



Ta esclarecido.... Desvendado o mistério . . . Rsrsrsr
O FIM de LINHA está no formato DOS/Windows "^M"
Para "deixar" com o Fim De Linha, linux, use o sed: sed 's/^M//'
OBS.: Para "escrever" o ^M, faça "Ctrl+v Ctrl+m"
Exemplo:
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1}|sed 's/^M//' sed 's/.*/[&]/' > /var/www/html/teste.txt
O Comando abaixo, estava ERRADO, desculpe, agora está corrigido, faltou o '-r'
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1}| sed 's/^M//'|sed -r 's/^[0-9]+$/[&]/' > /var/www/html/teste.txt
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1} | sed 's/^M//' | awk '{printf "[%s]" ,$0}' > /var/www/html/teste.txt
Agora vai funcionar....

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________



12. Re: Como inserir um valor ( resultado ) dentro de um colchete com AWK ou SED

Josevaldo Batista
duh182182

(usa Debian)

Enviado em 03/12/2019 - 03:11h

msoliver escreveu:


duh182182 escreveu:
Fiz o resultado foi
84^M$ 



Ta esclarecido.... Desvendado o mistério . . . Rsrsrsr
O FIM de LINHA está no formato DOS/Windows "^M"
Para "deixar" com o Fim De Linha, linux, use o sed: sed 's/^M//'
OBS.: Para "escrever" o ^M, faça "Ctrl+v Ctrl+m"
Exemplo:
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1}|sed 's/^M//' sed 's/.*/[&]/' > /var/www/html/teste.txt
O Comando abaixo, estava ERRADO, desculpe, agora está corrigido, faltou o '-r'
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1}| sed 's/^M//'|sed -r 's/^[0-9]+$/[&]/' > /var/www/html/teste.txt
ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1} | sed 's/^M//' | awk '{printf "[%s]" ,$0}' > /var/www/html/teste.txt
Agora vai funcionar....

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


Testei esse comando ssh -p 22 fox@172.20.1.2 {/interface pppoe-server print count-only where service=PPPoE-1} | sed 's/^M//' | awk '{printf "[%s]" ,$0}' > /var/www/html/teste.txt
o valor dentro do txt ficou da seguinte forma:
[83
]


Eu adaptei com o outro sed que o colega tinha postado sed -i -r 's/[0-9]+/[&]/' arquivo.txt Ficou assim 100% funcional.
| sed 's/^M//' | sed -r 's/[0-9]+/[&]/'


agora a crontab -e esta fazendo a checagem e os colchetes estão sendo inseridos ficando [82]

Explicando o motivo dessa finalidade como contribuição para todos aqui presente na comunidade. Esse script coleta a quantidade de pppoe-client vinculada ao pppoe-server que por sua vez tem como interface uma vlan no RouterOS ( Mikrotik ). Essa coleta com [ ] você pode adicionar um sensor http com PRTG ( free ) informando o endereço do seu Debian com apache instalado a url do script ex: 172.20.1.2/teste.txt. Assim terá um resultado para monitorar e verificar de forma pratica a quantidade de pppoe em cada rede.
Nessa pratica estou usando como teste o um servidor Debian, com apache instalado, nesse servidor o script coleta as informações do RouterOS via ssh e salva em um txt.

Agradeço ao colega msoliver e Ryuk por contribuir de forma clara e objetiva nessa pequena jornada.

O poste ficará aberto para mais esclarecimentos ao passar dos dias.






01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts