Tidak akan ada koma untuk dipisahkan tetapi hanya menggunakan join
:
$ join -j 2 file1 file2
a c
a d
a e
b c
b d
b e
Cara mekanis untuk melakukannya di shell, bukan menggunakan Perl atau Python, adalah:
while read line1
do
while read line2
do echo "$line1, $line2"
done < file2
done < file1
join
perintah kadang-kadang dapat digunakan untuk operasi ini - namun, saya tidak jelas apakah itu dapat melakukan produk cartesian sebagai kasus yang merosot.
Satu langkah maju dari putaran ganda adalah:
while read line1
do
sed "s/^/$line1, /" file2
done < file1
Inilah skrip shell untuk melakukannya
while read a; do while read b; do echo "$a, $b"; done < file2; done < file1
Meskipun itu akan sangat lambat. Saya tidak dapat memikirkan logika yang telah dikompilasi sebelumnya untuk melakukannya. Langkah selanjutnya untuk kecepatan adalah melakukan hal di atas dalam awk/perl.
awk 'NR==FNR { a[$0]; next } { for (i in a) print i",", $0 }' file1 file2
Hmm, bagaimana dengan solusi peretasan ini untuk menggunakan logika yang telah dikompilasi sebelumnya?
paste -d, <(sed -n "$(yes 'p;' | head -n $(wc -l < file2))" file1) \
<(cat $(yes 'file2' | head -n $(wc -l < file1)))