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}