Necesito lograr el siguiente script de Shell. Intento extraer HOSTNAME después de que se ejecute correctamente a través de Ansible Playbook Run.
Tengo un archivo de texto que contiene el comando de ejecución de Ansible-Playbook que se ejecutará y escribirá el resultado en el archivo de registro: result.log
Así es como se ve el archivo "result.log"
PLAY RECAP *********************************************************************
TESTLINUX01 : ok=6 changed=1 unreachable=0 failed=0
Si el error es "0", Inalcanzable es "0" y Cambiado es más de 0, imprima solo el NOMBRE DEL HOST. En este caso, TESTLINUX01
Gracias por su ayuda.
Respuesta1
Puedes usar algo como esto:
#!/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
Primero extraemos todos los valores necesarios y luego los comparamos con los deseados; si coinciden, imprimimos el nombre del host.
grep -Po "changed=\K\d+
devuelve el número delante de "cambiado"- Declaración SI:
$changed -ge 1
si se cambia es mayor que igual a "1"-a
y$unreachable -eq 0
inalcanzable era igual a "0"-a
y$failed -eq 0
fallido fue igual a "0", entonces:
cut -s -f1 -d: $file | tr -s ' '
imprime el nombre de host
Respuesta2
Gracias a todos por responder y dar la solución. El siguiente código me funciona:
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"