Sempre que você inserir dados com pares nome = valor, a melhor abordagem é criar primeiro uma matriz de nome e > valor e, em seguida, imprimir o conteúdo dessa matriz pelos seus próprios índices. Nesse caso, a ordem desses nomes vem de um arquivo diferente, portanto, leia primeiro:
$ cat tst.awk
BEGIN { FS="[=|]"; OFS="|" }
NR==FNR { outFldNames[++numOutFlds]=$0; next }
{
delete name2val
for (inFldNr=1; inFldNr<NF; inFldNr++) {
name2val[$inFldNr] = $(inFldNr+1)
}
for (outFldNr=1; outFldNr<=numOutFlds; outFldNr++) {
printf "%s%s", name2val[outFldNames[outFldNr]], (outFldNr<numOutFlds ? OFS : ORS)
}
}
$ awk -f tst.awk file2 file1
val1|val2|val3|val4||
val1|val2||val4|val5|val6
val1||val3|val4||val6
val1|val2|val3|val4|val5|val6