Salve isso em um arquivo, digamos patterns.awk
, em seguida, chame awk -f patterns.awk patterns data
, onde patterns
é seu primeiro arquivo e data
o segundo:
NR == FNR {
prefix[NR] = $0;
pattern[NR] = $2;
count++;
next;
}
{
for (i = 1; i <= count; i++) {
if (index($1, pattern[i]) > 0) {
print prefix[i] " " $0;
next;
}
}
}
Isso funciona da seguinte maneira: A primeira regra é usada enquanto lemos o arquivo padrão, ou seja, enquanto o número total de registros é igual ao número de registros no arquivo. Ele salva a linha e o padrão para procurar em dois arrays e continua. A segunda regra é usada assim que o número total de registros excede o número de registros no arquivo, ou seja, enquanto estamos lendo o arquivo de dados. Ele verifica se algum dos padrões corresponde à primeira coluna da linha. Em caso afirmativo, imprime a linha correspondente do arquivo padrão e, em seguida, a linha correspondente do arquivo de dados.