es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. Ajusta las columnas y elimina los duplicados en Shell. Eres un traductor de español que traduce documentos de TI. Traduce lo siguiente al español. Ajusta las columnas y elimina los duplicados en Shell.

Archivo de entrada


Failed,2021-12-14 05:47 EST,Respaldo a Demanda,abc,/clientes/FORD_1130PM_EST_Windows2008,Sistema de Archivos de Windows
Completado,2021-12-14 05:47 EST,Respaldo a Demanda,def,/clientes/FORD_1130PM_EST_Windows2008,Sistema de Archivos de Windows
Failed,2021-12-13 19:33 EST,Respaldo Programado,def,/clientes/FORD_730PM_EST_Windows2008,Sistema de Archivos de Windows
Failed,2021-12-14 00:09 EST,Respaldo Programado,abc,/clientes/FORD_1130PM_EST_Windows2008,Sistema de Archivos de Windows
Failed,2021-12-14 00:09 EST,Respaldo Programado,ghi,/clientes/FORD_1130PM_EST_Windows2008,Sistema de Archivos de Windows

Salida esperada


Failed,2021-12-14 00:09 EST,Respaldo Programado,ghi,/clientes/FORD_1130PM_EST_Windows2008,Sistema de Archivos de Windows

Solo quiero aquellos clientes que nunca tuvieron éxito y no haya un respaldo a demanda para ellos.

Código que intenté

awk -F',' '
   $1~/Failed/  { fail[$4]=$0 }
  $1~/Completed/ {delete fail[$4]}
 $3 ~ /Demand/ {delete fail[$4]}
END {for (i in fail) print fail[i]}     
 ' test
Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El código trata de filtrar la salida necesaria, pero no cumple completamente con los requisitos mencionados en la pregunta.

    Para obtener la salida esperada, debemos modificar el código de la siguiente manera:

    awk -F ',' '
        $1 == "Failed" && $3 == "Scheduled Backup" {
            fail[$4]+=1   # Contar el número de copias de seguridad fallidas para cada cliente
            path[$4]=$5   # Almacenar la ruta de la copia de seguridad para cada cliente
        }
        $1 == "Completed" && $3 == "On-Demand Backup" {
            success[$4]+=1   # Contar el número de copias de seguridad exitosas a petición para cada cliente
        }
        END {
            for (i in fail) {  # Iterar sobre todas las copias de seguridad fallidas
                if (!(i in success) && fail[i] >= 2) {  # Filtrar los clientes que no tienen copias de seguridad exitosas a petición y al menos 2 copias de seguridad programadas fallidas
                    print "Failed," fail[i] " veces,Scheduled Backup," i "," path[i]
                }
            }
        }
    ' archivo-de-entrada
    

    El código anterior utiliza arrays asociativos para almacenar el número de copias de seguridad fallidas y exitosas para cada cliente. Al final, itera sobre todas las copias de seguridad fallidas y filtra los clientes que cumplen con los requisitos mencionados en la pregunta. La salida también incluye el número de copias de seguridad fallidas y la ruta de la copia de seguridad para cada cliente.

Comments are closed.