단어 목록이 있어요. 예를 들어:
a=(ENCFF002CDP ENCFF002COQ ENCFF002DAJ ENCFF002DCM)
가능한 모든 조합을 실행하는 도구를 사용하고 싶습니다. 예를 들면 다음과 같습니다.
bedtools intersect -a ENCFF002CDP -b ENCFF002COQ > ENCFF002CDP.ENCFF002COQ.intersected
bedtools intersect -a ENCFF002CDP -b ENCFF002DAJ > ENCFF002CDP.ENCFF002DAJ.intersected
가능한 모든 조합에 대해 등등.
어떻게 해야 하나요?
답변1
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
위의 이중 루프는 주어진 ID의 모든 조합을 제공하지만 동일한 ID와 자체의 조합을 무시하고 A
조합이 이미 사용된 경우 ID를 자체와 결합하는 것을 방지합니다.B
B
A
예제 배열은 다음과 같이 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
답변2
이건 어때?
조합.py
import sys
from itertools import combinations
for i in combinations(sys.stdin.readline().strip().split(" "),2):
print i[0],i[1]
k.sh
#!/usr/bin/env bash
a=(ENCFF002CDP ENCFF002COQ ENCFF002DAJ ENCFF002DCM)
echo "${a[@]}" | python combo.py | while IFS=" " read -r a b
do
echo "bedtools intersect -a $a -b $b > $a.$b.intersected"
done
./k.sh가 생성되어야 합니다.
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
답변3
이것은 awk 버전입니다.
시스템에서 bedtools 명령을 실행해야 하는 경우 "echo" 및 "\\"를 제거하십시오.
$ awk '{
gsub(/[^0-9A-Z ]/,"") # delete unneeded chars like "a=(", ")"
for ( i=1; i < NF; i++) {
for (j=(i+1); j <= NF; j++) {
system("echo bedtools intersect -a "$i" -b "$j" \\> "$i"."$j".intersected")
}
}
}' file
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