Supondo que os arquivos sejam pequenos, pode ser viável lê-los em matrizes (com bash
ou ksh93
):
names=( $( <names.txt ) )
years=( $( <years.txt ) )
Você pode então criar um loop duplo que combina cada nome com cada ano por vez:
for n in "${names[@]}"; do
for y in "${years[@]}"; do
printf '%s%s\n' "$n" "$y"
done
done
Se years.txt
for pequeno, mas names.txt
for grande:
years=( $( <years.txt ) )
while read n; do
for y in "${years[@]}"; do
printf '%s%s\n' "$n" "$y"
done
done <names.txt
Resultado:
John2017
John2015
John2018
Jack2017
Jack2015
Jack2018
Jerry2017
Jerry2015
Jerry2018
Como tratar os arquivos como arquivos CSV de coluna única, sem cabeçalho:
$ csvsql -H --query "SELECT * FROM names CROSS JOIN years" names.txt years.txt | sed -e '1d' -e 's/,//'
Isso realiza uma operação de cruzamento cruzado nos dados nas duas tabelas e, em seguida, continua para remover a primeira linha da saída junto com todas as vírgulas ( csvsql
cria CSV formatado corretamente com uma linha de cabeçalho e valores separados por vírgulas).
csvsql
faz parte de csvkit
.