Para construir a resposta de Michael Borgwardt: contanto que ambos os arquivos sejam classificados, você pode colocá-los juntos basicamente executando uma etapa de um mergesort. Será um pouco diferente do padrão do mergesort porque você só quer manter um dos arquivos. Isso, obviamente, terá que ser implementado em sua linguagem de programação favorita.
Aqui está um esboço do algoritmo:
line1 = read a line from file 1
line2 = read a line from file 2
start of loop:
if (first word of line1 == first word of line2) {
write all fields of line1
and second field of line2 to output
line1 = read a line from file 1
go to start of loop
}
else if (first word of line1 < first word of line2) {
write line1 to output
line1 = read a line from file 1
go to start of loop
}
else (first word of line1 > first word of line2) {
line2 = read a line from file 2
go to start of loop
}
Aqui está uma versão em Python (já que Python é o que eu sei melhor, não necessariamente a melhor linguagem para o trabalho):
file1 = open('file1', 'r')
file2 = open('file2', 'r')
w2, n2 = file2.readline().split()
for line1 in file1:
w11, w12, w13, w14, n15 = line1.split()
if w11 == w2:
print w11, w12, w13, w14, n15, n2
continue
elif w11 < w2:
print w11, w12, w13, w14, n15
continue
else:
while w11 > w2:
w2, n2 = file2.readline().split()
if w11 == w2:
print w11, w12, w13, w14, n15, n2
elif w11 < w2:
print w11, w12, w13, w14, n15
e por completo, depois de algumas pesquisas, aqui está o que eu criei para o Awk:
BEGIN {
getline line2 <"file2";
split(line2, a);
}
{
if (a[1] == $1) print $0,a[2];
else if (a[1] < $1) print $0;
else { getline line2 <"file2"; split(line2, a); }
}
Invoque como awk -f program.awk <file1
.