Assumindo bash
e assumindo que ambos os arquivos estão classificados:
join -a1 <(sed 's/./& /6' input.txt) mapping.txt | sed 's/ //g; s/|$/|B00\/0000/'
Saída:
100180011|225|L08/2015
100180011|226|L08/2015
100181111|201|B00/0000
100181111|202|B00/0000
103823004|011|A06/2012
103823004|011|J02/2012
103823004|011|J03/2012
103823004|012|A06/2012
103823004|012|J02/2012
103823004|012|J03/2012
Não há awk
à vista, desculpe. :)
Editar: explicação:
-
sed 's/./& /6'
- adiciona um espaço após o sexto caractere em cada linha, então a saída é100180 011|225|L08/2015
-
join -a1
une os arquivos na primeira coluna;-a1
informajoin
para deixar as linhas inalteradas inalteradas do primeiro arquivo -
sed 's/ //g;'
- remove os espaços no resultado - ...
's/|$/|B00\/0000/'
- adiciona/|B00/0000
às linhas que terminam com|
, ou seja, às linhas não correspondentes do primeiro arquivo.