Espaços não são permitidos em torno de =
!
Então:
#!/bin/bash
ping -c 20 google.com > results.txt
packetloss=$(awk '/packet loss/{print $6}' results.txt)
echo "$packetloss" >> debug.txt
Ou ainda mais curto:
ping -c 20 google.com |
awk '/packet loss/{sub(/%/, "");print $6 >> "debug.txt"}'
NOTA:
- Não é necessário atribuir a variável
x
; você pode imprimir$6
diretamente. - O próprio AWK pode criar novos arquivos com sua saída
- O backquote
'
é usado na substituição de comandos do estilo antigo, por exemplo:
foo='command'
A sintaxe foo=$(command)
é recomendada em seu lugar. A manipulação de barra invertida dentro de $()
é menos surpreendente, e $()
é mais fácil de aninhar.
Verifique o link
Solução extra usando Perl :
ping -c 20 google.com |
perl -lne '/(\d+)%\s+packet\s+loss/ and print $1' >> debug.txt