awk -F"[= ]+" -vm=1 '{gsub(/;/,"",$2);s[$1]=$2} END{while(m==1){m=0;for(i in s){l=split(s[i],p,"_");for(j=1;j<=l;j++){if(p[j] in s){gsub(p[j],s[p[j]],s[i])}};y=split(s[i],u,"_");for(k=1;k<=y;k++){if(u[k] in s){m=1}}}};for(i in s){print i" = "s[i]";"}}' o
awk '{sub(/;$/,"")} NR==FNR{a[$1]=$3;next} {while($3~/[A-D]1|[A-D][A-D]/){split($3,b,"_");for(i in b)if(b[i] in a){sub(b[i],a[b[i]],$3)}};$0=$0";"}1' i i