Pensez aux fichiers suivants:
file1
:
boo,8,1024
foo,7,2048
file2
:
foo,0,24,154
noo,0,10,561
file3
:
24,154,7,1024,0
Ce dont j'ai besoin, c'est d'aller dans File1 et de vérifier si $2==7
; si cela est vrai, prendre $1
, $2
et $3
de Fichier1 ; maintenant je dois comparer si $1
de Fichier1 égal à $1
partir Fichier2 ; si c'est vrai, je dois prendre $3
et $4
de File2 qui n'existent pas dans File1 , alors je dois aller à File3 et vérifier si $1
de File3 est égal à $3
de File2 , et $2
de File3 est égal à $4
de File2 ; si oui, je dois vérifier si $2
depuis File1est égale à $3
partir Fichier3 , alors si cette condition est vrai, je dois comparer $3
de Fichier1 avec $4
de Fichier3 , si $3
de Fichier1 est plus $4
de Fichier3 .
J'ai essayé le script suivant:
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 sortie souhaitée est:
foo,7,2048,24,154,1024
text-processing
awk
gawk
Eng7
la source
la source
Solution TXR:
Courir:
Mais l'observateur astucieux notera que le 7 n'a été spécifié nulle part dans le code, n'apparaissant que dans la sortie! En effet, le code parcourt tous les enregistrements
file1
et imprime toutes les combinaisons qui correspondent aux correspondances et à la contrainte . Le seul des exemples de données est celui avec l'val0
être7
.S'il y avait plus de combinaisons trouvées, cela pourrait être limité à
7
celle comme celle-ci:Le langage d'extraction de modèle TXR fournit ici une grande correspondance de modèle avec des références arrière implicites via la répétition de noms de variables, couvrant plusieurs fichiers, avec des modèles d'extraction sur plusieurs lignes et des contraintes non textuelles, ainsi que des effets secondaires intégrés comme la sortie, etc. .
La solution Awk acceptée a soigneusement traduit la
awk
macro TXR Lisp :Courir:
La
,1024
partie requise dans la sortie est manquante; le "Awk Classic" d'origine a ce comportement.la source