$ awk 'NR == FNR { names[$1]; next }
{ for (name in names) printf("%s%s\n", name, $0) }' file1 file2
Adam,2018-2-1301
Tim,2018-2-1301
John,2018-2-1301
Adam,2018-3-1379
Tim,2018-3-1379
John,2018-3-1379
Adam,2018-1-3809
Tim,2018-1-3809
John,2018-1-3809
Adam,2018-2-5801
Tim,2018-2-5801
John,2018-2-5801
Isso usa awk
para ler o primeiro arquivo (o arquivo com os três nomes) em uma matriz associativa (como chaves). Quando se trata de ler o segundo arquivo, cada linha do segundo arquivo é reproduzida repetidamente junto com cada nome de leitura anterior.
O teste NR == FNR
é verdadeiro se estivermos lendo o primeiro arquivo. Ele testa o número do registro geral ("número da linha") com o número do registro no arquivo atual.
Você também pode fazer uma mesclagem cruzada com o GNU join
assim:
$ join -j 99 -o1.1,2.1 file[12]
Adam ,2018-2-1301
Adam ,2018-3-1379
Adam ,2018-1-3809
Adam ,2018-2-5801
John ,2018-2-1301
John ,2018-3-1379
John ,2018-1-3809
John ,2018-2-5801
Tim ,2018-2-1301
Tim ,2018-3-1379
Tim ,2018-1-3809
Tim ,2018-2-5801
... onde 99
é um campo não existente em qualquer arquivo.
Neste exemplo, os espaços inseridos podem ser removidos canalizando o resultado por meio de tr -d ' '
.