Something
public text v1 · immutableBEGIN {
rules[0.0] = "X 1=bah 2=foo";
rules[0.1] = "X 1=whee 2=yaz";
}
function applyrule(s,rule, n,rv,blah) {
n = split(rule,rv);
if (!index(s,"${" rv[1] ":")) return "";
for (i = 2;i <= n;++i) {
split(rv[i],blah,"=");
gsub("\\${" rv[1] ":" blah[1] "}",blah[2],s);
}
return s;
}
function doit(s, didit) {
for (i in rules)
if (t = applyrule(s,rules[i])) { didit = 1; doit(t); }
if (!didit) print s;
}
{ doit($0); }