Com join
, você pode tentar assim:
join -t\* \
<(sed 's/\(.*\)\(\*\)\(.*\)//' file1 | sort -t\* -k1,1) \
<(sed 's/\(.*\)\(\*\)\(.*\)//' file2 | sort -t\* -k1,1)
Os dois sed
s movem o último campo para o início da linha, por exemplo,
field1*field2*...field(N-1)*field(N)
torna-se
field(N)*field1*field2*...*field(N-1)
os resultados são então sort
ed no campo 1
st e, em seguida, join
ed (sempre no campo 1
st). Isto irá imprimir linhas como:
field(N)*fields(1)to(N-1)*from*file1*fields(1)to(N-1)*from*file2
Se você preferir trabalhar com arquivos temporários e salvar o resultado join
em, por exemplo, outfile
:
sed 's/\(.*\)\(\*\)\(.*\)//' file1 | sort -t\* -k1,1 > sorted_1
sed 's/\(.*\)\(\*\)\(.*\)//' file2 | sort -t\* -k1,1 > sorted_2
join -t\* sorted_{1,2} > outfile
rm -f sorted_{1,2}