Considere los siguientes archivos:
file1
:
boo,8,1024
foo,7,2048
file2
:
foo,0,24,154
noo,0,10,561
file3
:
24,154,7,1024,0
Lo que necesito es ir a File1 y verificar si $2==7
; si es cierto, tomar $1
, $2
y $3
de archivo1 ; ahora tengo que comparar si $1
desde File1 igual a $1
desde File2 ; si es cierto, tengo que tomar $3
y $4
de archivo2 , que no existe en archivo1 , entonces tengo que ir a File3 y comprobar si $1
de File3 es igual al $3
de archivo2 , y $2
desde File3 es igual al $4
de archivo2 ; en caso afirmativo, entonces tengo que verificar si $2
desde File1es igual al $3
de File3 , a continuación, si esta condición es verdadera, tengo que comparar $3
de archivo1 con el $4
de File3 , si $3
de archivo1 es más $4
de File3 .
Intenté el siguiente script:
cat [file1] [file2] [file3] |
awk -F,
'{if(NF==3)
{if($2==7){a[$1]=$1; b[$1]=$2; c[$1]=$3}
}else
{if(NF==4){if(a[$1]==$1){d[$3]=$3; e[$4]=$4}
}else
{if(NF==5){if(d[$1]==$1 && e[$2]==$2){print a[$1], b[$1], c[$1], d[$1]}}
}
}
}'
La salida deseada es:
foo,7,2048,24,154,1024
text-processing
awk
gawk
Eng7
fuente
fuente
Solución TXR:
Correr:
Pero el astuto observador notará que el 7 no se ha especificado en ninguna parte del código, ¡solo aparece en la salida! Esto se debe a que el código en realidad está avanzando por todos los registros
file1
e imprime todas las combinaciones que cumplen con las coincidencias y restricciones . El único en los datos de muestra es el que tieneval0
ser7
.Si se encontraran más combinaciones, podría limitarse solo a
7
una como esta:El lenguaje de extracción de patrones TXR proporciona aquí una gran coincidencia de patrones con referencias implícitas a través de la repetición de nombres de variables, que abarcan varios archivos, con patrones de extracción de varias líneas y restricciones no textuales, además de efectos secundarios integrados como salida, etc. .
La solución Awk aceptada tradujo cuidadosamente la
awk
macro TXR Lisp :Correr:
La
,1024
parte requerida en la salida está ausente; el "Awk Classic" original tiene este comportamiento.fuente