![프로그램을 실행하기 위해 서로 다른 디렉터리에 있는 여러 파일을 반복합니다.](https://linux55.com/image/161101/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8%EC%9D%84%20%EC%8B%A4%ED%96%89%ED%95%98%EA%B8%B0%20%EC%9C%84%ED%95%B4%20%EC%84%9C%EB%A1%9C%20%EB%8B%A4%EB%A5%B8%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%20%EC%9E%88%EB%8A%94%20%EC%97%AC%EB%9F%AC%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EB%B0%98%EB%B3%B5%ED%95%A9%EB%8B%88%EB%8B%A4..png)
그래서 iRep 프로그램을 실행해 보았습니다. 일반적으로 다음과 같이 실행됩니다.
iRep -f Bins/10000A-01-01_bin.* -s sam/10000A-01-01.sam.sorted.sam --sort -o 10000A-01-01_iRep_output
샘 폴더에서 -
10000A-01-01.sam.sorted.sam
10000A-01-02.sam.sorted.sam
10000A-01-03.sam.sorted.sam
Bins 폴더에서 -
10000A-01-01_bin.1.fa
10000A-01-01_bin.2.fa
10000A-01-01_bin.3.fa
10000A-01-02_bin.1.fa
10000A-01-02_bin.2.fa
10000A-01-02_bin.3.fa
10000A-01-03_bin.1.fa
10000A-01-03_bin.3.fa
10000A-01-03_bin.5.fa
10000A-01-03_bin.7.fa
다음과 같이 각 예제에 대해 각 명령을 개별적으로 실행하는 대신 하나의 명령으로 모든 작업을 수행하는 루프를 원합니다.
iRep -f Bins/10000A-01-01_bin.* -s sam/10000A-01-01.sam.sorted.sam --sort -o 10000A-01-01_iRep_output
iRep -f Bins/10000A-01-02_bin.* -s sam/10000A-01-02.sam.sorted.sam --sort -o 10000A-01-02_iRep_output
iRep -f Bins/10000A-01-03_bin.* -s sam/10000A-01-03.sam.sorted.sam --sort -o 10000A-01-03_iRep_output
어떻게 할 수 있는지 아시나요?
답변1
#!/bin/sh
# Loop over the SAM files
for sam in sam/*.sam.sorted.sam; do
# Extract the sample name by taking the basename of the SAM file
# and removing the known filename suffix.
sample=$(basename "$sam" .sam.sorted.sam)
# Call iRep (as described in the question)
iRep -f Bins/"$sample"_bin.* -s "$sam" --sort -o "$sample"_iRep_output
done
문제의 파일이 주어지면 결국 실행됩니다.
iRep -f Bins/10000A-01-01_bin.1.fa Bins/10000A-01-01_bin.2.fa Bins/10000A-01-01_bin.3.fa -s sam/10000A-01-01.sam.sorted.sam --sort -o 10000A-01-01_iRep_output
iRep -f Bins/10000A-01-02_bin.1.fa Bins/10000A-01-02_bin.2.fa Bins/10000A-01-02_bin.3.fa -s sam/10000A-01-02.sam.sorted.sam --sort -o 10000A-01-02_iRep_output
iRep -f Bins/10000A-01-03_bin.1.fa Bins/10000A-01-03_bin.3.fa Bins/10000A-01-03_bin.5.fa -s sam/10000A-01-03.sam.sorted.sam --sort -o 10000A-01-03_iRep_output
답변2
GNU Parallel을 사용하면 다음과 같습니다:
parallel --plus iRep -f Bins/{/...}_bin.* -s {} --sort -o {/...}_iRep_output ::: sam/*.sam.sorted.sam