0

我有一个包含一堆文件的目录。我需要为 qsub 创建一个 bash 文件并在所有文件的所有对上运行一个程序:

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
4

2 回答 2

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
于 2019-03-15T11:00:28.767 回答
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

于 2019-03-15T11:00:37.897 回答