Eu preciso realizar o seguinte script de shell. Estou tentando extrair o HOSTNAME depois que ele for executado com sucesso por meio do Ansible Playbook Run.
Eu tenho um arquivo de texto que contém o comando de execução do Ansible-Playbook para ser executado e gravar a saída no arquivo de log: result.log
Esta é a aparência do arquivo "result.log"
PLAY RECAP *********************************************************************
TESTLINUX01 : ok=6 changed=1 unreachable=0 failed=0
Se falhou for "0", Inacessível for "0" e Alterado for maior que 0, imprima apenas o HOSTNAME. Neste caso, TESTLINUX01
Obrigado pela ajuda.
Responder1
Você pode usar algo assim:
#!/bin/bash
file="result.log"
changed=`grep -Po "changed=\K\d+" $file`
unreachable=`grep -Po "unreachable=\K\d+" $file`
failed=`grep -Po "failed=\K\d+" $file`
if [ $changed -ge 1 -a $unreachable -eq 0 -a $failed -eq 0 ]
then
cut -s -f1 -d: $file | tr -s ' '
fi
Primeiro extraímos todos os valores necessários e depois os comparamos com os desejados; se corresponderem, imprimimos o nome do host.
grep -Po "changed=\K\d+
retorna o número antes de "alterado"- Declaração SE:
$changed -ge 1
se alterado é maior que igual a "1"-a
e$unreachable -eq 0
inacessível era igual a "0"-a
e$failed -eq 0
falhou foi igual a "0", então:
cut -s -f1 -d: $file | tr -s ' '
imprime o nome do host
Responder2
Obrigado a todos por responder e fornecer a solução. O código a seguir funciona para mim:
cat $file
$file >> $LOGFILE
SUCCESS=`grep "unreachable=0 failed=0" $LOGFILE | awk '{printf "%s ", $1;}'`
echo "Success: $SUCCESS"
FAILURE=`grep -E "unreachable=0 failed=[1-9]" $LOGFILE | awk '{printf "%s ", $1;}'`
echo "Failure: $FAILURE"
Unreachable=`grep -E "unreachable=1 failed=0" $LOGFILE | awk '{printf "%s ", $1;}'`
echo "Unreachable: $Unreachable"