2017-12-31 6 views
0

Ich versuche, Stapel-Dateien mit samtools aus zwei Dateien, File1 und File2, zu erstellen.BASH Pile-up-Dateien werden rekursiv erstellt, indem Werte verwendet werden, die von einer Spalte in einer anderen Datei stammen.

Ich habe File1 und File2 von Chromosom aufgeteilt, nach dem Format benannt in mit 44 Dateien resultierender:

chr${c}.${TISSUE}_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 

wobei $ {c} eine Zahl zwischen 1 und 22 und $ TISSUE ist entweder Kolon oder Muskel - 22 Chromosomen für Doppelpunkt und 22 für Muskel. Ie. chr1.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY chr2.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY

. 
. 
. 

chr22.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 
chr1.muscle_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 
. 
. 
. 

Diese Dateien bestehen aus zwei Spalten, die erste zeigt nur die Chromosomenzahl, und die zweite Spalte eine Position auf diesem Chromosom. Ie.

head chr2.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 
chr2 103977 
chr2 112051 
chr2 126199 
chr2 146288 
chr2 147797 
chr2 147822 
chr2 148548 
chr2 148525 
chr2 158189 
chr2 158188 

Für jede Zeile in der Datei (zB "chr2.colon_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY"), muß ich die Position einzunehmen, nennt es ‚x‘, aus Spalte 2, und es verwendet, eine Reihe von a-b zu bekommen, wo a=x-5 und b=x+5. Ich werde dann diese Werte in das folgende Skript stecken:

samtools mpileup -f [REFERENCE GENOME] File1 File2 -r chr${c}:a-b 

Angenommen, ich bin auf der Suche auf Chromosom 2, Position 103977 (Reihe 1 oben). Dann wäre mein Skript

Also im Grunde ist es eine Schleife innerhalb einer Schleife innerhalb einer Schleife. So etwas wie,

for t in $(colon, muscle) 
do 
    for c in $seq (1 22) 
    do 
    for item (or maybe row?) in 
     chr${c}.${t}_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY 
    do 
     awk '{print $2}' | something something something 
     x= position in col 2, a=x-5 b=x+5 
     samtools mpileup -f [REFERENCE GENOME] File1 File2 -r chr${c}:a-b 
    done 
    done 
done 
... 

Vielen Dank im Voraus. Ich bin ganz neu in der Arbeit mit Linux und habe im Wesentlichen keine Informatikausbildung.

+2

Hallo, verwenden Sie bitte bearbeiten und verwenden Sie die Code (geschweifte Klammern) -Funktion auf dem Post-Editor für die Lesbarkeit. Die Frage ist nicht lesbar, bitte organisieren Sie es. Ich empfehle Ihnen, auf andere Fragen zu schauen, um zu lernen, wie man eine richtige Frage schreibt. GL :) – Blacky

Antwort

1

Awk eine Zeile zu einem Zeitpunkt verarbeitet, so würde ich für so etwas wie

for t in colon muscle; do 
    for c in $(seq 1 22); do 
     awk '{ print $2-5 "-" $2+5 }' chr${c}.${t}_run1_en2hic_PE1.bam.sorted.bam.breaks_COL1_and_COL2_ONLY | 
     while read -r range; do 
      samtools mpileup -f [REFERENCE GENOME] File1 File2 -r chr${c}:$range 
     done 
    done 
done 

Mit anderen Worten geht, verarbeitet Awk die gesamte Datei und führt eine Zeile der Ausgabe zu einem Zeitpunkt, zu der endgültigen while read -r range Schleife .

Ich verstehe nicht, wie Sie diese Dateien an erster Stelle aufteilen, oder was für eine Massenkarambolage ist, aber ich vermute, dass dies erheblich vereinfacht werden könnte, wenn Sie gerade direkt auf File1 und File2 stattdessen arbeiten.

Sie könnten wahrscheinlich auch die äußeren Schleifen vermeiden und einfach Awk auf allen *_ONLY Dateien direkt ausführen. Sie können den aktuellen Dateinamen von Awks interner Variable FILENAME erhalten, aber in diesem Fall können Sie anscheinend nur das erste Feld verwenden.

awk '{ print $1 ":" $2-5 "-" $2+5 }' *_ONLY | 
while read -r chrrange; do 
    samtools mpileup -f [REFERENCE GENOME] File1 File2 -r "$chrrange" 
done 

Wenn Sie $1 nicht direkt verwenden können, versuchen split(FILENAME, f, /\./) und drucken f[1] das Chromosom Kennungsteil aus dem Dateinamen zu erhalten.

0

Dies ist, was für mich arbeiten endete:

module load SAMtools 

awk '{print $1, $2-5 "-" $2+5}' FILE PATH |\ 
while read chrom range 
do 

    samtools mpileup -f /REFERENCE GENOME\ 
      /${chrom}.COLON BAM FILE\ 
      /${chrom}.MUSCLE BAM FILE\ 
      -r $chrom:$range -o ${chrom}.colon.${range}.pileup 

done

Dank für Ihre Hilfe danken!

Verwandte Themen