Você pode tentar seguir:
awk 'NR == FNR { x[$1,$2] = $1; next; } { for (i in x) { if (x[i] == $1) { split(i,t,SUBSEP); for (z = 2; z <= NF; z++) { print t[2] "|" $z "|"; } } } }' input.txt mapping.txt
O primeiro bloco é executado durante a leitura do arquivo input.txt
. É alcançado pela condição NR == FNR
que é true
enquanto o primeiro arquivo é lido. No primeiro bloco, criamos uma matriz x
com chaves da primeira e segunda coluna e valores da primeira coluna. O segundo bloco é executado para o arquivo mapping.txt
devido a next
no primeiro bloco. No segundo bloco verificamos todas as chaves no array x
se o valor da coluna 1 existe como valor no array x
, e se existe extrai a segunda parte da chave com split
e imprimimos em um loop este valor e valores da segunda coluna até a última coluna ( NF
- número de campos no registro atual).