ファイル内の各行を他のすべての行と費用効果的に関連付ける

ファイル内の各行を他のすべての行と費用効果的に関連付ける

数字のみを含む非常に大きなファイルがあります。ドキュメント -

123212
234234
12324
1243223
5453443

各行を他のすべての行とペアリングしたいと思います。出力は次のとおりです

123212,234234
123212,12324
123212,1243223
123212,5453443
234234,123212
234234,12324
234234,1243223
234234,5453443
12324,123212
12324,234234
12324,1243223
12324,5453443
1243223,123212
1243223,234234
1243223,12324
1243223,5453443
5453443,123212
5453443,234234
5453443,12324
5453443,1243223

これは、入力ファイルに50L以上のレコードが含まれているためです。したがって、ループを介してこれを行うと、高価な作業になります。

ベストアンサー1

この出力を生成するすべての方法は高価です。ただし、このアプローチはファイルがRAMよりはるかに大きい場合でも機能します。

$ while read n; do awk -v n="$n" '$1!=n{print n "," $1}' file; done <file
123212,234234
123212,12324
123212,1243223
123212,5453443
234234,123212
234234,12324
234234,1243223
234234,5453443
12324,123212
12324,234234
12324,1243223
12324,5453443
1243223,123212
1243223,234234
1243223,12324
1243223,5453443
5453443,123212
5453443,234234
5453443,12324
5453443,1243223

複数行に書き込む

while read n
do
    awk -v n="$n" '$1!=n{print n "," $1}' file
done <file

read nfile一度に1つの数字を読んでください。それぞれに対して awk スクリプトを実行して、最初の列に出力セクションを作成しますnnこのオプションは、シェル変数と同じ値で名前付き-v n="$n"awk変数を生成します。この条件は、ファイル内のこの行と番号の異なる行を選択します。この行の場合は、番号、カンマ、行番号を順番に印刷します。nn$1!=nfilenn

おすすめ記事