Il n'y aura pas de virgule pour séparer mais en utilisant uniquement join
:
$ join -j 2 file1 file2
a c
a d
a e
b c
b d
b e
La manière mécanique de le faire en shell, sans utiliser Perl ou Python, est :
while read line1
do
while read line2
do echo "$line1, $line2"
done < file2
done < file1
Le join
La commande peut parfois être utilisée pour ces opérations - cependant, je ne suis pas sûr qu'elle puisse faire un produit cartésien comme un cas dégénéré.
Une étape à partir de la double boucle serait :
while read line1
do
sed "s/^/$line1, /" file2
done < file1
Voici le script shell pour le faire
while read a; do while read b; do echo "$a, $b"; done < file2; done < file1
Bien que cela soit assez lent. Je ne vois aucune logique précompilée pour accomplir cela. La prochaine étape pour la vitesse serait de faire ce qui précède dans awk/perl.
awk 'NR==FNR { a[$0]; next } { for (i in a) print i",", $0 }' file1 file2
Hmm, que diriez-vous de cette solution hacky pour utiliser une logique précompilée ?
paste -d, <(sed -n "$(yes 'p;' | head -n $(wc -l < file2))" file1) \
<(cat $(yes 'file2' | head -n $(wc -l < file1)))