for 루프를 분기하는 동안 오류가 발생했습니까?

for 루프를 분기하는 동안 오류가 발생했습니까?

분기된 셸에서 두 개의 입력 파일을 받아 네 개의 파일을 출력하는 코드를 실행하려고 합니다. 다음은 for 루프 내에서 수행하려는 작업의 예입니다. 예상한 결과가 생성됩니다.

sudo java -jar ~/Trimmomatic-0.36/trimmomatic-0.36.jar PE -phred33 \
my_dir/sample_1/77504_S11_L003_R1_001.fastq.gz \
my_dir/sample_1/77504_S11_L003_R2_001.fastq.gz \
my_dir/sample_1/77504_S11_L003_PE1_001_Adapter_Removed.fastq.gz \
my_dir/sample_1/77504_S11_L003_PE1_001_Adapter_Removed_U.fastq.gz \
my_dir/sample_1/77504_S11_L003_PE2_001_Adapter_Removed.fastq.gz \
my_dir/sample_1/776504_S11_L003_PE2_001_Adapter_Removed_U.fastq.gz \
ILLUMINACLIP:~/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10 \
LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36

모든 입력 파일이 동일한 디렉토리에 있고 모든 입력 쌍이 동일한 하위 디렉토리에 있지만 두 개의 개별 입력 쌍이 동일한 하위 디렉토리에 있지 않습니다.

Pair 1:
my_dir/sample_1/77504_S11_L003_R1_001.fastq.gz
my_dir/sample_1/77504_S11_L003_R2_001.fastq.gz

Pair 2:
my_dir/sample_2/77505_S11_L003_R1_001.fastq.gz
my_dir/sample_2/77505_S11_L003_R2_001.fastq.gz

첫 번째 블록의 약 50개 파일에 대해 코드를 실행해야 합니다. 이것이 지금까지 얻은 것이지만 코드가 어댑터를 찾지 못하기 때문에 정확하지 않다는 것을 알고 있습니다.

ILLUMINACLIP:~/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10

다시 말하지만, 이 코드 줄은 제가 게시한 첫 번째 코드 블록에서 잘 작동합니다.

AdapterQCTrim () {
# Make base1
base=$(basename $filename .fastq.gz)
echo $base

# Make base2
baseR2=${base/_R1_/_R2_}
echo $baseR2

# Run Trimmomatic
sudo java -jar ~/Trimmomatic-0.36/trimmomatic-0.36.jar PE -phred33 \
${base}.fastq.gz \
${baseR2}.fastq.gz \
${base}.qc.fq.gz \
s1_UP \
${baseR2}.qc.fq.gz \
s2_UP \
ILLUMINACLIP:~/Trimmomatic-0.36/adapters/TruSeq3-PE.fa:2:30:10 \
LEADING:3 TRAILING:3 SLIDINGWINDOW:4:15 MINLEN:36

# Save
gzip -11c s1_UP s2_PE >> paired.qc.fq.gz
gzip -11c s1_UP s2_UP >> orphans.qc.fq.gz
}

for filename in *_R1_*.fastq.gz; do AdapterQCTrim & done

이 프로세스를 단순화할 수 있는 방법이 있다면 다른 아이디어도 열려 있습니다.

답변1

코드는 괜찮아 보이지만 한 줄뿐입니다.

for filename in *_R1_*.fastq.gz; do AdapterQCTrim & done

이것은 *_R1_*당신이 기대하는 대로 전개되지 않을 것입니다. 작성하는 동안 쌍은 서로 다른 디렉터리에 있으므로 하위 폴더에 기능을 적용하려면 구조 */_R1_*.fastq.gz에 있어야 합니다. for슬래시를 참고하세요. 하위 폴더가 포함된 위치에서 이 작업을 수행해야 합니다. for루프 앞에 다음과 같은 것을 추가하면 이러한 일이 발생하는지 확인할 수 있습니다 .

cd theRightDirectory || exit 1

for그런데 포크되지 않았습니다. 메인 프로세스에서 실행됩니다.

관련 정보