GNU/Linux >> Linux の 問題 >  >> Linux

GNU/Linux における 2 つのファイル (行のセットとして) のデカルト積

区切るコンマはありませんが、 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)))

Linux
  1. ファイルをセットとして扱い、それらに対してセット操作を実行するLinuxツール?

  2. Linux – 2回の間に作成されたファイルを削除する方法は?

  3. 2つのファイル間の共通行?

  1. 2 つのセット/ファイル間で一意の値を抽出する

  2. Linux で同じサイズの 2 つのファイルのバイナリ diff を実行するにはどうすればよいですか?

  3. Linuxで2つの文字列を一緒に含むファイルを見つける方法は?

  1. Linuxで2つのテキストファイルを結合する方法

  2. 2つのファイルを2つの列に印刷しますか?

  3. 異なるファイルの2つの列を比較し、一致する場合は印刷しますか?