분기된 셸에서 두 개의 입력 파일을 받아 네 개의 파일을 출력하는 코드를 실행하려고 합니다. 다음은 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
그런데 포크되지 않았습니다. 메인 프로세스에서 실행됩니다.