从向量创建元素组合以作为程序的输入

fus*_*ope 2 bash shell-script

我有一个单词列表。例如:

a=(ENCFF002CDP ENCFF002COQ ENCFF002DAJ ENCFF002DCM)  
Run Code Online (Sandbox Code Playgroud)

我想运行它们的所有可能组合并使用一个工具,例如:

bedtools intersect -a ENCFF002CDP -b ENCFF002COQ > ENCFF002CDP.ENCFF002COQ.intersected  
bedtools intersect -a ENCFF002CDP -b ENCFF002DAJ > ENCFF002CDP.ENCFF002DAJ.intersected  
Run Code Online (Sandbox Code Playgroud)

等所有可能的组合。

我怎样才能做到这一点?

Kus*_*nda 5

declare -a encode_ids=(ENCFF002CDP ENCFF002COQ ENCFF002DAJ ENCFF002DCM)  

for (( i = 0; i < ${#encode_ids[@]}; ++i )); do
  for (( j = i + 1; j < ${#encode_ids[@]}; ++j )); do
    bedtools intersect -a "${encode_ids[i]}" -b "${encode_ids[j]}" \
      >"${encode_ids[i]}.${encode_ids[j]}".intersected
  done
done
Run Code Online (Sandbox Code Playgroud)

上面的双循环将为您提供给定 ID 的所有组合,但会忽略相同 ID 与自身的组合,并避免将 IDA与已使用B的组合进行组合。BA

示例数组将导致以下bedtool运行:

bedtools intersect -a ENCFF002CDP -b ENCFF002COQ >ENCFF002CDP.ENCFF002COQ.intersected
bedtools intersect -a ENCFF002CDP -b ENCFF002DAJ >ENCFF002CDP.ENCFF002DAJ.intersected
bedtools intersect -a ENCFF002CDP -b ENCFF002DCM >ENCFF002CDP.ENCFF002DCM.intersected
bedtools intersect -a ENCFF002COQ -b ENCFF002DAJ >ENCFF002COQ.ENCFF002DAJ.intersected
bedtools intersect -a ENCFF002COQ -b ENCFF002DCM >ENCFF002COQ.ENCFF002DCM.intersected
bedtools intersect -a ENCFF002DAJ -b ENCFF002DCM >ENCFF002DAJ.ENCFF002DCM.intersected
Run Code Online (Sandbox Code Playgroud)