Ich habe gtf
Dateien in über 100 Verzeichnissen. Unten zeige ich, wie sie aussehen.
SampleA
|___________ SampleA.GRCh38.gtf
SampleB
|___________ SampleB.GRCh38.gtf
Hier zeige ich nur zwei gtf
Dateien als Beispiel.
SampleA.GRCh38.gtf
sieht wie folgt aus:
# stringtie -e -B -p 8 -G /path/stringtie_output/stringtie_merged.gtf -o /path/SampleA.GRCh38.gtf /path/SampleA.sorted.bam
# StringTie version 1.3.3
chr1 StringTie transcript 11594 191502 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; cov "0.0"; FPKM "0.000000"; TPM "0.000000";
chr1 StringTie exon 11594 14829 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "1"; cov "0.0";
chr1 StringTie exon 14970 15038 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "2"; cov "0.0";
chr1 StringTie exon 15796 16765 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "3"; cov "0.0";
chr1 StringTie exon 16858 17055 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "4"; cov "0.0";
chr1 StringTie exon 17233 17742 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "5"; cov "0.0";
chr1 StringTie exon 17915 18061 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "6"; cov "0.0";
chr1 StringTie exon 18268 19364 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "7"; cov "0.0";
chr1 StringTie exon 189836 191502 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "8"; cov "0.0";
chr1 StringTie transcript 11594 195411 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; cov "0.0"; FPKM "0.000000"; TPM "0.000000";
chr1 StringTie exon 11594 14829 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "1"; cov "0.0";
chr1 StringTie exon 14970 15236 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "2"; cov "0.0";
chr1 StringTie exon 185758 187287 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "3"; cov "0.0";
chr1 StringTie exon 187376 187577 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "4"; cov "0.0";
chr1 StringTie exon 187755 187890 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "5"; cov "0.0";
chr1 StringTie exon 188130 188266 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "6"; cov "0.0";
chr1 StringTie exon 188439 188584 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "7"; cov "0.0";
chr1 StringTie exon 188791 188902 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "8"; cov "0.0";
chr1 StringTie exon 195263 195411 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "9"; cov "0.0";
chr1 StringTie transcript 11594 197912 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.5"; cov "0.0"; FPKM "0.000000"; TPM "0.000000";
Und SampleB.GRCh38.gtf
sieht wie folgt aus:
# stringtie -e -B -p 8 -G /path/stringtie_output/stringtie_merged.gtf -o /path/SampleB.GRCh38.gtf /path/SampleB.sorted.bam
# StringTie version 1.3.3
chr1 StringTie transcript 11594 191502 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; cov "0.0"; FPKM "0.000000"; TPM "1.000000";
chr1 StringTie exon 11594 14829 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "1"; cov "0.0";
chr1 StringTie exon 14970 15038 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "2"; cov "0.0";
chr1 StringTie exon 15796 16765 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "3"; cov "0.0";
chr1 StringTie exon 16858 17055 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "4"; cov "0.0";
chr1 StringTie exon 17233 17742 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "5"; cov "0.0";
chr1 StringTie exon 17915 18061 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "6"; cov "0.0";
chr1 StringTie exon 18268 19364 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "7"; cov "0.0";
chr1 StringTie exon 189836 191502 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.2"; exon_number "8"; cov "0.0";
chr1 StringTie transcript 11594 195411 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; cov "0.0"; FPKM "0.000000"; TPM "3.000000";
chr1 StringTie exon 11594 14829 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "1"; cov "0.0";
chr1 StringTie exon 14970 15236 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "2"; cov "0.0";
chr1 StringTie exon 185758 187287 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "3"; cov "0.0";
chr1 StringTie exon 187376 187577 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "4"; cov "0.0";
chr1 StringTie exon 187755 187890 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "5"; cov "0.0";
chr1 StringTie exon 188130 188266 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "6"; cov "0.0";
chr1 StringTie exon 188439 188584 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "7"; cov "0.0";
chr1 StringTie exon 188791 188902 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "8"; cov "0.0";
chr1 StringTie exon 195263 195411 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.6"; exon_number "9"; cov "0.0";
chr1 StringTie transcript 11594 197912 . - . gene_id "MSTRG.7542"; transcript_id "MSTRG.7542.5"; cov "0.0"; FPKM "0.000000"; TPM "0.000000";
Ich möchte nur aus der 3. Spalte extrahieren transcript
und transcript_id
welche die 10. Spalte und TPM
welche die letzte Spalte ist. Es TPM
müssen aber die Beispielnamen sein.
Ich möchte, dass die Ausgabe wie folgt aussieht:
Type transcript_id SampleA SampleB
transcript MSTRG.7542.2 0.000000 1.000000
transcript MSTRG.7542.6 0.000000 3.000000
transcript MSTRG.7542.5 0.000000 1.000000
Antwort1
Sie müssen die relevanten Datensätze aus jeder Datei extrahieren und das Ergebnis in zwei neue temporäre Dateien schreiben (möglicherweise mit awk
), wobei Sie es möglicherweise sort
gleichzeitig (mit ) sortieren müssen (die Beispieldateien geben an, dass sie sortiert sind, aber möglicherweise nicht nach dem richtigen Schlüssel). Hier ist ein Beispiel für die Verarbeitung einer der Dateien:
awk '$3 == "transcript" {printf("%s %s %s ", $3, $10, $12, $18);}' SampleA.GRCh38.gtf | sort -k 2 > tf1
Anschließend können Sie join
die beiden von generierten temporären/Zwischendateien zusammenführen, awk
sodass jeder Datensatz die beiden letzten Spalten aus jeder Datei enthält.
Hier ist ein Beispiel für einen join
Befehl, den Sie verwenden könnten:
join -o 1.1,1.2,1.3,2.3 -1 2 -2 2 tf1 tf2
Möglicherweise möchten Sie vor dem Ausführen eine Kopfzeile drucken (z. B. mithilfe des printf
Befehls) , Leerzeichen in der Ausgabe durch Tabulatoren join
ersetzen (z. B. mithilfe von ) oder ein anderes Skript zum Formatieren der Ausgabe verwenden.join
sed
awk
Anhand dieser Beispiele sollten Sie in der Lage sein, ein Skript zusammenzustellen, das beide Dateien verarbeitet und die gewünschte Ausgabe erzeugt (und die temporären Dateien usw. bereinigt).
Beachten Sie, dass Sie je nach Größe der Datendateien möglicherweise sogar alles in einem awk
(oder python
oder perl
usw.) Programm erledigen können (d. h. können alle ausgewählten Daten aus beiden Dateien problemlos gleichzeitig im Speicher gehalten werden).
Antwort2
Sie können nur join
die Dateien und dann awk
diejenigen mit herausnehmen, NF==4
da nur die Zeilen, die Sie interessieren, ein 18. Feld haben. Alle anderen Zeilen haben nur 2 Felder
Außerdem werden bei der Berechnung des Pfads zu bestimmte Annahmen getroffen SampleB
, Sie können diese jedoch entsprechend ändern....
while IFS= read -r -d '' f; do #read the list of SampleA
g=$(echo "$f" | sed "s/pleA/pleB/g") #calculate path to SampleB
if [[ -f "$g" ]]; then #check SampleB exists
echo "$f" | sed "s/.*pleA\.//g" #print sample No
echo "Type transcript_id SampleA SampleB" #print header
#do the join
join -j 12 -o 1.3 -o 1.12 -o 1.18 -o2.18 <(sort -k 12 "$f") <(sort -k 12 "$g") | awk 'NF==4'
fi | sed 's/[;"]//g'| column -t #make it pretty
done < <(find . -type f -iname "*SampleA*" -print0) #NULL separated list of SampleA
Antwort3
Mit dem Befehl Below versucht
Schritt 1
awk '$3 ~ /transcript/{print $0}' file1|awk '{print $3,substr($12,2,12),substr($NF,2,8)}' > out1
SCHRITT 2
awk '$3 == "transcript" {print substr($NF,2,8)}' file2 > out2
SCHRITT 3
paste out out1.txt | awk 'BEGIN{print "Type transcript_id SampleA SampleB"}{print $0}'
Output
Type transcript_id SampleA SampleB
transcript MSTRG.7542.2 0.000000 1.000000
transcript MSTRG.7542.6 0.000000 3.000000
transcript MSTRG.7542.5 0.000000 0.000000