Bash - ファイルの各行をペアリングします。

Bash - ファイルの各行をペアリングします。

この質問は以下に関連しています。これそしてこれ質問。複数行を含むファイルがあり、各行はファイルへのパスです。今、各行を各行とペアリングしたいと思います。その他ライン(自体ではない)。また、私の目的に応じて、ペアはペアとA B同じでB Aあるため、これらの組み合わせの1つだけを作成する必要があります。

はい

files.dat短縮表記では、次のように読みます。各文字はファイルパス(絶対または相対)です。

a
b
c
d
e

それから私の結果は次のようになります。

a b
a c
a d
a e
b c
b d
b e
c d
c e
d e

bashでこの問題を解決することをお勧めします。他の質問とは異なり、私のファイルリストはかなり小さく(約200行)、ループとRAM容量を使用しても問題は発生しません。

ベストアンサー1

次のコマンドを使用します。

awk '{ name[$1]++ }
    END { PROCINFO["sorted_in"] = "@ind_str_asc"
        for (v1 in name) for (v2 in name) if (v1 < v2) print v1, v2 }
        ' files.dat

PROCINFO拡張かもしれませんgawk。サポートされていない場合は、その行をawk省略しPROCINFO["sorted_in"] = "@ind_str_asc"て出力をパイプで接続しますsort(出力をソートしたい場合)。

(これは本当ですいいえ入力をソートする必要があります。 )

おすすめ記事