我的目录中有一堆文件。我需要创建一个bash文件到qsub并在所有文件对中运行一个程序:
for $file1, $file2 in all_pairs
do
/path/program -i $file1 $file2 -o $file1.$file2.result
done
所以我可以做:
qsub script.sh
获得:
file1.file2.result
file1.file3.result
file2.file3.result
对于具有以下内容的目录:
file1
file2
file3
答案 0 :(得分:2)
以下可能是最简单的:
一对a-b
与b-a
不同:
set -- file1 file2 file3 file4 ...
for f1; do
for f2; do
/path/program -i "$f1" "$f2" -o "$f1.$f2.result"
done
done
一对a-b
等于b-a
:
set -- file1 file2 file3 file4 ...
for f1; do
shift
for f2; do
/path/program -i "$f1" "$f2" -o "$f1.$f2.result"
done
done
答案 1 :(得分:1)
您可以像使用其他每种编程语言一样进行操作:
files=(file1 file2 file3) # or use a glob to list the files automatically, for instance =(*)
max="${#files[@]}"
for ((i=0; i<max; i++)); do
for ((j=i+1; j<max; j++)); do
echo -i "${files[i]}" "${files[j]}" -o "${files[i]}${files[j]}.result"
done
done
对结果感到满意时,将echo
替换为/path/program