Es wird kein Komma zum Trennen verwendet, sondern nur join
:
$ join -j 2 file1 file2
a c
a d
a e
b c
b d
b e
Der mechanische Weg, dies in der Shell zu tun, ohne Perl oder Python zu verwenden, ist:
while read line1
do
while read line2
do echo "$line1, $line2"
done < file2
done < file1
Die join
Der Befehl kann manchmal für diese Operationen verwendet werden - mir ist jedoch nicht klar, dass er als degenerierter Fall ein kartesisches Produkt ausführen kann.
Ein Schritt nach oben von der Doppelschleife wäre:
while read line1
do
sed "s/^/$line1, /" file2
done < file1
Hier ist das Shell-Skript dafür
while read a; do while read b; do echo "$a, $b"; done < file2; done < file1
Obwohl das ziemlich langsam sein wird. Ich kann mir keine vorkompilierte Logik vorstellen, um dies zu erreichen. Der nächste Schritt für die Geschwindigkeit wäre, das Obige in awk/perl zu machen.
awk 'NR==FNR { a[$0]; next } { for (i in a) print i",", $0 }' file1 file2
Hmm, wie wäre es mit dieser hackigen Lösung, um vorkompilierte Logik zu verwenden?
paste -d, <(sed -n "$(yes 'p;' | head -n $(wc -l < file2))" file1) \
<(cat $(yes 'file2' | head -n $(wc -l < file1)))