簡單而脆弱的解決方案

簡單而脆弱的解決方案

因此,我使用一種名為「tuxedo」的協議進行 RNA 定序數據分析。這更多是與 shell 腳本相關的技術問題。我可以在命令列中執行此操作,並且沒有任何問題。由於我是在叢集中執行此操作,因此我想使用一個可以自動執行任務的腳本。

所以協議命令是這樣的:

  1. 高帽

  2. 袖扣

  3. 袖口融合

  4. 袖口

    第一個命令執行所有對齊操作,產生一些文件,我必須將其用於下一個命令cufflinks,然後cuffmerge是最後cuffdiff

任何人都可以幫我編寫一個簡單的 shell 腳本,它可以呼叫每個命令並執行任務。

任何幫助將不勝感激。

論點

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”對應於我用來註釋將要對齊的原始讀取的註釋文件。

答案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 中,並另存為 halmary.sh。

  2. 在 Nautilus 中,右鍵點擊您剛剛建立的檔案並選擇 Properties.轉到Permissions選項卡並在旁邊打勾 允許將檔案作為程式執行

    或者,在終端機中輸入:

    chmod +x 冰雹.sh

  3. 若要在終端機中執行腳本,請輸入:

    ./hailmary.sh

名稱之前的內容./是必需的,並假定該檔案位於目前目錄位置。如果您將文件放在路徑中的資料夾中,例如/home/<userid>/bin,那麼您將不需要./.如果你把它放在其他地方,你將需要寫下整個路徑,例如:

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

請注意,四個命令及其參數位於四個單獨的行中。如果要將它們放在一行中,則必須用&&或分隔它們;。沒有必要;如果它們位於不同的行中,則

在任何這些情況下,第二個命令都不會啟動,直到第一個命令完成(或崩潰!)。

這種方法的問題是,它不會在運行第二個命令之前檢查第一個命令是否成功運行,依此類推。因此,如果tophat由於某種原因失敗,腳本將繼續執行 cufflink、cuffmerge 和 cuffdiff 的順序。這就是為什麼我稱這篇文章為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

希望這會有所幫助,直到其他人提供更優雅的答案。

相關內容