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
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]