Die einfache und fragile Lösung

Die einfache und fragile Lösung

Ich verwende also ein Protokoll namens „Tuxedo“ für die Analyse von RNA-Sequenzdaten. Es handelt sich eher um eine technische Frage im Zusammenhang mit Shell-Skripten. Ich kann das in der Befehlszeile tun und habe keine Probleme. Da ich es in einem Cluster mache, möchte ich ein Skript verwenden, das meine Aufgabe automatisieren kann.

Die Protokollbefehle lauten also wie folgt:

  1. Zylinder

  2. Manschettenknöpfe

  3. Manschettenknöpfe

  4. Manschettendifferenz

    Der erste Befehl führt die gesamte Ausrichtung durch, wodurch eine Datei generiert wird, die ich für den nächsten Befehl verwenden muss cufflinks, und dann cuffmergeund schließlich cuffdiff.

Kann mir jemand helfen, ein einfaches Shell-Skript zu schreiben, das jeden dieser Befehle aufrufen und die Aufgabe ausführen kann?

Für jede Hilfe wäre ich sehr dankbar.

Argumente

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

wobei „p“ der Prozessornummer entspricht, „-o“ dem Ausgabeverzeichnis und „-g“ der Annotationsdatei entspricht, die ich zum Kommentieren meiner RAW-Lesevorgänge verwende, die ausgerichtet werden.

Antwort1

Die einfache und fragile Lösung

Schreiben wir ein einfaches Skript namens 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. Kopieren Sie alle obigen Zeilen, einschließlich der Zeilen, die mit „#“ beginnen, und fügen Sie sie in gedit ein, und speichern Sie sie als hailmary.sh.

  2. Klicken Sie in Nautilus mit der rechten Maustaste auf die soeben erstellte Datei und wählen Sie Properties. Gehen Sie zur PermissionsRegisterkarte und setzen Sie ein Häkchen neben Ausführen der Datei als Programm zulassen.

    Alternativ können Sie in einem Terminal Folgendes eingeben:

    chmod +x hailmary.sh

  3. Um das Skript in einem Terminal auszuführen, geben Sie Folgendes ein:

    ./hailmary.sh

Das ./vor dem Namen ist erforderlich und setzt voraus, dass sich die Datei im aktuellen Verzeichnis befindet. Wenn Sie die Datei in einem Ordner ablegen, der sich im Pfad befindet, z. B. /home/<userid>/bin, benötigen Sie das nicht ./. Wenn Sie sie woanders ablegen, müssen Sie den gesamten Pfad angeben, z. B.:

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

Beachten Sie, dass die vier Befehle und ihre Argumente in vier separaten Zeilen stehen. Wenn Sie sie in einer einzigen Zeile platzieren möchten, müssen Sie sie durch &&oder durch trennen. Wenn sie in separaten Zeilen stehen, ;ist dies nicht erforderlich .;

In jedem dieser Fälle wird der zweite Befehl erst gestartet, wenn der erste abgeschlossen ist (oder abstürzt!).

Das Problem bei diesem Ansatz ist, dass nicht geprüft wird, ob der erste Befehl erfolgreich ausgeführt wurde, bevor der zweite ausgeführt wird, und so weiter und so fort. Wenn also tophataus irgendeinem Grund ein Fehler auftritt, fährt das Skript mit der Sequenz von Cufflink, Cuffmerge und Cuffdiff fort. Aus diesem Grund nenne ich dies Skript hailmary.sh.

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

Skript mit Prüfung auf Ausgabe von 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

Hoffe, das hilft, bis jemand anderes eine elegantere Antwort gibt.

verwandte Informationen