Supondo que os números estão no arquivo numbers
e que o arquivo de modelo que você gostaria de usar é file
:
awk -F'|' -v OFS='|' 'NR==FNR { n[++i] = $0; next } { for (i in n) { $3 = substr($3,1,2) n[i]; print } }' numbers file
Isso primeiro lerá os números na matriz n
e, em seguida, para o arquivo de modelo, use os dois primeiros caracteres do terceiro campo |
-delimited, concatene isso com os números da matriz n
e imprima o resultado uma vez para cada número.
As opções -F'|' -v OFS='|'
garantem a leitura e gravação dos dados como |
-delimited.
Em seguida, basta redirecionar a saída disso para um novo arquivo.
Isso não depende do modelo para conter xxxxxxxxx
.
Teste:
$ cat file
09Y20171031 13415520171031 134155AP|AO|AB something something|AC|CH|BIN|
$ awk -F'|' -v OFS='|' 'NR==FNR { n[++i] = $0; next } { for (i in n) { $3 = substr($3,1,2) n[i]; print } }' numbers file
09Y20171031 13415520171031 134155AP|AO|AB550425175|AC|CH|BIN|
09Y20171031 13415520171031 134155AP|AO|AB550426504|AC|CH|BIN|
09Y20171031 13415520171031 134155AP|AO|AB550411876|AC|CH|BIN|
Uma abordagem bash
-only (sem utilitários externos) que usa os nove x
-es:
template=$(<file)
while read number; do
printf '%s\n' "${template//xxxxxxxxx/$number}"
done <numbers