Meistens finde ich es hilfreicher, wenn jemand in Prosa erklärt, was er eigentlich tun will. Du kannst natürlich trotzdem das Skript posten. In meiner Erfahrung neigt man dann aber dazu, sich mit den Details der konkreten Lösung zu beschäftigen, anstatt den Ansatz zu untersuchen.
Ich bin Biologin und sequenziere. Also ich entschlüssel DNA Sequenzen. Die Auswertung der Daten erfordert ziemlich viel Rechenleistung und ist zum Teil auch recht komplex. Es gibt viele gute Linux-basierte Softwares, die aber zum Teil extrem lange Befehle benötigen.
Daher habe ich einige Skripte verfasst um die Auswertung etwas mehr zu automatisieren. Denn wenn man 50 Proben hat und dann für jede Probe manuell einen dreizeiligen Befehl verfassen muss, dreht man irgendwann durch.
In diesem Skript möchte ich sogenannte FASTQ Files zusammenführen. fastq.gz Files sind die Sequenzier-Rohdaten und zwischen 100-600 MB groß. Manchmal ist die Probe an sich schon recht gering konzentriert und es ist schwer genügend Daten bei der Sequenzierung zu erhalten. Also Sequenzieren wir doppelt oder dreifach und fügen danach die FASTQ Dateien zusammen.
das Skript soll nun folgendes tun:
1. Alle FASTQ Files finden, die zu einer bestimmten Probe gehören:
| find . -name $ID-$IDP*fastq.gz -print
|
Wobei $ID die Projektnummer ist und $IDP die ID der Probe (wird vorher über read -p "ermittelt"
2. Nach Angabe welche FASTQ Files zusammengefügt werden sollen (über read -p), sollen diese zunächst in einen neuen Ordner, den man definiert, kopiert werden und dann zusammengefügt werden. Eigentlich war es das schon 😉
1
2
3
4
5
6
7
8
9
10
11
12
13 | read -p "Bitte geben Sie an welche Proben zusammengefügt werden sollen:" MERGE
read -p "Bitte geben Sie an in welchem Projekt-Unterordner die zusammgeführten FASTQ Dateien gespeichert werden sollen:" UNTERORDNER
for i in ${MERGE[@]}; do
DIRNAME="${ID}-${i}"
find . -name "$DIRNAME"_R1.fastq.gz -exec cp '{}' "$CASE/$UNTERORDNER/Sequenzen/Intermediate_merge_$IDP/R1/$DIRNAME"_R1_Kopie.fastq.gz \;
done
cat "$CASE"/"$UNTERORDNER"/Sequenzen/Intermediate_merge_"$IDP"/R1/*.fastq.gz >> "$CASE"/"$UNTERORDNER"/Sequenzen/FASTQ/"$ID"-"$IDP"/"$ID"-"$IDP"_R1.fastq.gz
|
Zwischendurch werden noch Ordner generiert (if Schleife ob UNTERORDNER vorhanden ist. Wenn nicht, wird ein neuer generiert) und am Ende wird noch einmal überprüft, ob die neu erstellte fastq.gz Datei auch wirklich vorhanden ist und der komplette Intermediate Ordner gelöscht.
Ich habe das Skript überprüft und es tut genau das, was es tun soll.
Wenn du aber noch Ideen hast, wie man das einfacher gestalten kann, dann gerne her damit. Das Suchen der Dateien hat zunächst recht lange gedauert, aber seitdem ich nur noch nach fastq.gz Files suche, ist es OK. Das Suchen mit anschließendem Zusammenfügen dauert eine Weile, aber wenn ich 2x 600MB Proben habe, ist das vermutlich nicht verwunderlich. Mein Rechner hat auch nur 64 GB RAM. Wenn man bedenkt, dass viele in meinem Bereich mit 500 GB RAM arbeiten, ist das schon sehr sehr wenig. Aber bald kommt ein neuer Rechner 😉