たとえば、ディレクトリにn個のファイルがあるとします。
a
b
c
これらのファイルの組み合わせ(非指定)を関数にどのように渡すことができますか?
予想される出力は次のとおりです。
a-b
a-c
b-c
このようにして、次の関数に渡すことができます。
fn -file1 a -file2 b
fn -file1 a -file2 c
...
これが私が今試していることです。
for i in *.txt
do
for j in *.txt
do
if [ "$i" != "$j" ]
then
echo "Pairs $i and $j"
fi
done
done
出力
Pairs a.txt and b.txt
Pairs a.txt and c.txt
Pairs b.txt and a.txt
Pairs b.txt and c.txt
Pairs c.txt and a.txt
Pairs c.txt and b.txt
私はまだ重複したファイルを持っていて(abはbaと同じです)、おそらくこれを行うより良い方法があると思いました。
ベストアンサー1
ファイル名を配列に入れ、2つのループを介して手動で実行します。
次の場合は、1つの一致のみを取得できます。j <私どこ私そしてジェイ外部ループと内部ループでそれぞれ使用されるインデックスです。
$ touch a b c d
$ f=(*)
$ for ((i = 0; i < ${#f[@]}; i++)); do
for ((j = i + 1; j < ${#f[@]}; j++)); do
echo "${f[i]} - ${f[j]}";
done;
done
a - b
a - c
a - d
b - c
b - d
c - d