区切るコンマはありませんが、 join
のみを使用します :
$ join -j 2 file1 file2
a c
a d
a e
b c
b d
b e
Perl や Python を使用せずにシェルで行う機械的な方法は次のとおりです:
while read line1
do
while read line2
do echo "$line1, $line2"
done < file2
done < file1
join
コマンドはこれらの操作に使用できる場合がありますが、縮退したケースとしてデカルト積を実行できるかどうかはわかりません.
二重ループから 1 ステップアップすると、次のようになります:
while read line1
do
sed "s/^/$line1, /" file2
done < file1
これを行うためのシェルスクリプトは次のとおりです
while read a; do while read b; do echo "$a, $b"; done < file2; done < file1
ただし、これは非常に遅くなります。これを達成するためのプリコンパイル済みロジックは思いつきません。速度を上げるための次のステップは、上記を awk/perl で実行することです。
awk 'NR==FNR { a[$0]; next } { for (i in a) print i",", $0 }' file1 file2
うーん、プリコンパイルされたロジックを使用するこのハックなソリューションはどうですか?
paste -d, <(sed -n "$(yes 'p;' | head -n $(wc -l < file2))" file1) \
<(cat $(yes 'file2' | head -n $(wc -l < file1)))