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.

Coincidencia condicional con comparación de múltiples campos en diferentes archivos utilizando AWK.

Necesito tu ayuda nuevamente sobre cómo hacer coincidir 2 campos/columnas en 2 archivos separados, incluyendo la coincidencia condicional de registros (estado <> ‘X’ en Employee.txt y disponibilidad = ‘Y’ en Car.txt). Employee.txt ($1 – número de empleado, $2 – deporte). Car.txt ($4 – número de empleado, $2 – deporte). A continuación, se muestra lo que estoy tratando de lograr:

Employee1.txt (la última columna es el **estado**)
1|canotaje|Sam|Smith|Seatle|X
2|trote|Barry|Jones|Seatle|
3|fútbol|Garry|Brown|Houston|
4|trote|George|Bla|LA|X
5|baloncesto|Celine|Wood|Atlanta|
6|tennis|Jody|Ford|Chicago|

Car1.txt (la última columna es **disponibilidad**)
100|fútbol|azul|5|Y
110|tennis|verde|9|N
120|hockey|amarillo|8|N
130|fútbol|amarillo|6|N
140|trote|rojo|2|Y
150|canotaje|blanco|0|

awk -F"|" '
NR==FNR {
  if ($NF == "Y")
     car[$4,$2]
     next
}
{
    print > ($NF != "X" && ($1,$2) in car ? "match.txt" : "no_match.txt")
}' Car.txt Employee.txt

no_match.txt es igual a Employee.txt. Cero registros en match.txt.

Resultado deseado:
match.txt
2|trote|Barry|Jones|Seatle|
5|baloncesto|Celine|Wood|Atlanta|

no_match.txt
3|fútbol|Garry|Brown|Houston|
6|tennis|Jody|Ford|Chicago|

Muchas gracias,
George

Tags:  ,

Answer

  1. Avatar for davy.ai

    Hola George,

    Para obtener la salida deseada, puedes usar el siguiente comando awk:

    awk -F"|" '
    NR==FNR {
    if ($NF == "Y")
    car[$4,$2]
    next
    }
    {
    if (($NF != "X") && ($1,$2) in car)
    print > "match.txt"
    else
    print > "no_match.txt"
    }' Car1.txt Employee1.txt

    Esto debería generar la salida deseada, con “match.txt” conteniendo los registros que coinciden y “no_match.txt” conteniendo los registros que no coinciden.

    Avísame si tienes alguna pregunta o inquietud adicional.

    Saludos,
    [Tu Nombre]

Comments are closed.