간단하고 취약한 솔루션

간단하고 취약한 솔루션

그래서 RNA 염기서열 데이터 분석을 위해 '턱시도'라는 프로토콜을 사용하고 있습니다. 쉘 스크립팅과 관련된 일종의 기술적 질문입니다. 명령줄에서 그렇게 할 수 있으며 그런 문제는 없습니다. 클러스터에서 수행하고 있으므로 작업을 자동화할 수 있는 스크립트를 사용하고 싶습니다.

따라서 프로토콜 명령은 다음과 같습니다.

  1. 모자

  2. 커프스 링크

  3. 커프 병합

  4. 커프디프

    첫 번째 명령은 다음 명령에 사용해야 하는 일부 파일을 생성하는 모든 정렬을 수행 cufflinks하고 cuffmerge마지막으로 수행 합니다 cuffdiff.

누구든지 이러한 각 명령을 호출하고 작업을 수행할 수 있는 간단한 쉘 스크립트를 작성하도록 도와줄 수 있습니까?

어떤 도움이라도 주시면 감사하겠습니다.

인수

tophat -p 8 -G genes.gtf -o C1_R1_thout genome C1_R1_1.fq C1_R1_2.fq
cufflinks -p 8 -o C1_R1_clout C1_R1_thout/accepted_hits.bam
cuffmerge -g genes.gtf -s genome.fa -p 8 assemblies.txt 
cuffdiff -o diff_out -b genome.fa -p 8 –L C1,C2 -u merged_asm/merged.gtf \
./C1_R1_thout/accepted_hits.bam,./C1_R2_thout/accepted_hits.bam,./C1_R3_thout/accepted_hits.bam \
./C2_R1_thout/accepted_hits.bam,./C2_R3_thout/accepted_hits.bam,./C2_R2_thout/accepted_hits.bam

여기서 'p'는 프로세서 수에 해당하고 '-o'는 출력 디렉터리에 해당하고 나머지 '-g'는 정렬될 RAW 읽기에 주석을 달기 위해 사용하는 주석 파일에 해당합니다.

답변1

간단하고 취약한 솔루션

hailmary.sh라는 간단한 스크립트를 작성해 보겠습니다.

#!/bin/bash
#The first line should always be just as it is above
#This script is called hailmary.sh
#because we run this script and we need to pray
#that all four commands will run correctly
#If one of them fail, you may not get the results

tophat -p 8 -G genes.gtf -o C1_R1_thout genome C1_R1_1.fq C1_R1_2.fq
cufflinks -p 8 -o C1_R1_clout C1_R1_thout/accepted_hits.bam
cuffmerge -g genes.gtf -s genome.fa -p 8 assemblies.txt 
cuffdiff -o diff_out -b genome.fa -p 8 –L C1,C2 -u merged_asm/merged.gtf ./C1_R1_thout/accepted_hits.bam,./C1_R2_thout/accepted_hits.bam,./C1_R3_thout/accepted_hits.bam ./C2_R1_thout/accepted_hits.bam,./C2_R3_thout/accepted_hits.bam,./C2_R2_thout/accepted_hits.bam
  1. "#"으로 시작하는 줄을 포함하여 위의 모든 줄을 gedit에 복사하여 붙여넣고 hailmary.sh로 저장합니다.

  2. 노틸러스에서 방금 생성한 파일을 마우스 오른쪽 버튼으로 클릭하고 를 선택합니다 Properties. 탭 으로 이동하여 Permissions옆에 확인 표시를 하세요. 파일을 프로그램으로 실행 허용.

    또는 터미널에 다음을 입력합니다.

    chmod +x hailmary.sh

  3. 터미널에서 스크립트를 실행하려면 다음을 입력하십시오.

    ./hailmary.sh

./이름 앞에 가 필요하며 파일이 현재 디렉터리 위치에 있다고 가정합니다 . /home/<userid>/bin와 같은 경로에 있는 폴더에 파일을 넣으면 ./. 다른 곳에 놓는 경우 다음과 같이 전체 경로를 작성해야 합니다.

/home/<userid>/myspecialfolder/hailmary.sh

네 개의 명령과 해당 인수는 네 개의 별도 줄에 있습니다. 한 줄에 넣으려면 &&또는 로 구분해야 합니다 ;. ;별도의 줄에 있으면 필요하지 않습니다 .

어떤 경우든 두 번째 명령은 첫 번째 명령이 완료될 때까지(또는 충돌할 때까지) 시작되지 않습니다.

이 접근 방식의 문제점은 두 번째 명령 등을 실행하기 전에 첫 번째 명령이 성공적으로 실행되었는지 확인하지 않는다는 것입니다. 따라서 tophat어떤 이유로 실패하면 스크립트는 커프스 단추, 커프 병합 및 커프 디프 순서로 계속됩니다. 이것이 내가 이것을 scrip이라고 부르는 이유이다 hailmary.sh.

원천:https://unix.stackexchange.com/questions/184502/bash-how-to-run-a-command-after-the-previous-finished

tophat의 출력을 확인하는 스크립트

#!/bin/bash
#The first line should always be just as it is above
#This script is called hailmary2.sh
#This script runs tophat
#then checks for the existance of the output file
#If the output is found, it runs the rest

tophat -p 8 -G genes.gtf -o C1_R1_thout genome C1_R1_1.fq C1_R1_2.fq

if [[ -f "./C1_R1_thout/accepted_hits.bam" ]]; then
    echo "tophat finished. Proceeding with the rest"
    cufflinks -p 8 -o C1_R1_clout C1_R1_thout/accepted_hits.bam
    cuffmerge -g genes.gtf -s genome.fa -p 8 assemblies.txt 
    cuffdiff -o diff_out -b genome.fa -p 8 –L C1,C2 -u merged_asm/merged.gtf ./C1_R1_thout/accepted_hits.bam,./C1_R2_thout/accepted_hits.bam,./#C1_R3_thout/accepted_hits.bam ./C2_R1_thout/accepted_hits.bam,./C2_R3_thout/accepted_hits.bam,./C2_R2_thout/accepted_hits.bamfi
else echo "tophat did not complete"
fi

다른 사람이 더 우아한 답변을 제공할 때까지 이것이 도움이 되기를 바랍니다.

관련 정보