터미널과 qsub에서 제출된 다른 결과

터미널과 qsub에서 제출된 다른 결과

터미널에서 명령을 실행하고 클러스터에 제출하려고 하는데 다른 결과가 나타납니다.

터미널에 다음을 입력하면:

$ for i in *_1.fastq.gz; do echo $i >> t.txt; zcat $i | \
    grep "GCTGGCAAAAAGAAGGTAACATGTTTT" >> t.txt ; echo >> t.txt ; done

나는 이렇게 출력된다

adrenal_4a_ERR315335_1.fastq.gz
GCANAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA

adrenal_4a_ERR315452_1.fastq.gz
GCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA
CAAGAACAGAATGAAGAAAGTCAGGGGGACTGCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGAAACTATGTAGCATAGTGTCTT

adrenal_4c_ERR315392_1.fastq.gz

adrenal_4c_ERR315450_1.fastq.gz

and so on..

이는 예상되는 결과입니다.

HPC 클러스터에 동일한 명령을 제출하면 qsub완전히 다른 결과가 나타납니다.

$ qsub -l h_vmem=4G -cwd -j y -b y -N n_tr -R y \
    "for i in *_1.fastq.gz; do echo $i >> t.txt; zcat $i | \
       grep "GCTGGCAAAAAGAAGGTAACATGTTTT" >> t.txt ; echo >> t.txt ; done"

adrenal_4a_ERR315452_1.fastq.gz
GCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA
CAAGAACAGAATGAAGAAAGTCAGGGGGACTGCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGAAACTATGTAGCATAGTGTCTT

adrenal_4a_ERR315452_1.fastq.gz

appendix_4a_ERR315437_1.fastq.gz
GCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA
CAAGAACAGAATGAAGAAAGTCAGGGGGACTGCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGAAACTATGTAGCATAGTGTCTT

adrenal_4a_ERR315452_1.fastq.gz
GCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA
CAAGAACAGAATGAAGAAAGTCAGGGGGACTGCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGAAACTATGTAGCATAGTGTCTT

adrenal_4a_ERR315452_1.fastq.gz
GGACTGCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGAAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGA

appendix_4a_ERR315465_1.fastq.gz
GCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA
CAAGAACAGAATGAAGAAAGTCAGGGGGACTGCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGAAACTATGTAGCATAGTGTCTT

adrenal_4a_ERR315452_1.fastq.gz

appendix_4b_ERR315345_1.fastq.gz
GCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA
CAAGAACAGAATGAAGAAAGTCAGGGGGACTGCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGAAACTATGTAGCATAGTGTCTT

adrenal_4a_ERR315452_1.fastq.gz
GCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGGAACTATGTAGCATAGTGTCTTAACACCTCAGTAAAGAGATCGGAAGAGCACA
CAAGAACAGAATGAAGAAAGTCAGGGGGACTGCAAAGGCCAATGTTGGTGCTGGCAAAAAGAAGGTAACATGTTTTAAGAAACTATGTAGCATAGTGTCTT

내가 여기서 뭘 잘못하고 있는 걸까?

답변1

명령에 잘못된 따옴표가 사용되었습니다.

큰따옴표( "...")를 사용하면 쉘이 변수(예: )를 평가할 수 있습니다 $i. 이미 변수를 사용했고 값이 유지되었기 adrenal_4a_ERR315452_1.fastq.gz때문에 qsub다음이 실행되는 것을 볼 수 있습니다.

for i in *_1.fastq.gz; do echo adrenal_4a_ERR315452_1.fastq.gz >> t.txt; zcat adrenal_4a_ERR315452_1.fastq.gz | grep GCTGGCAAAAAGAAGGTAACATGTTTT >> t.txt ; echo >> t.txt ; done

가장 바깥쪽 따옴표를 작은 따옴표( '...')로 변경하면 예상대로 작동합니다.

qsub -l h_vmem=4G -cwd -j y -b y -N n_tr -R y 'for i in *_1.fastq.gz; do echo $i >> t.txt; zcat $i | grep "GCTGGCAAAAAGAAGGTAACATGTTTT" >> t.txt ; echo >> t.txt ; done'

답변2

이 시도:

$ qsub -l h_vmem=4G -cwd -j y -b y -N n_tr -R y \
    'for i in *_1.fastq.gz; do echo $i >> t.txt; zcat $i | \
        grep "GCTGGCAAAAAGAAGGTAACATGTTTT" >> t.txt ; echo >> t.txt ; done'

차이점이 보이시나요?

큰따옴표(")를 작은따옴표(')로 변경했습니다.

 'for i in ....t.txt ; done'
 ^^^                     ^^^

이렇게 하면 로컬 쉘 확장 내부의 모든 것으로부터 보호됩니다. 큰따옴표를 사용하면 *_1.fastq.gz컴퓨터 클러스터의 노드에서보다 로컬로 확장하는 것이 훨씬 쉽습니다.

관련 정보