AWK: Zeilen extrahieren, wenn die Spalte in Datei 1 in einen Bereich fällt, der in zwei Spalten in einer anderen Datei deklariert ist

Derzeit habe ich mit einem AWK-Problem zu kämpfen, das ich noch nicht lösen konnte. Ich habe eine riesige Datei (30 GB) mit Genomdaten, die eine Liste mit Positionen (in Spalte 1 und 2 deklariert) und eine zweite Liste mit einer Reihe von Bereichen (in Spalte 3, 4 und 5 deklariert) enthält. Ich möchte alle Zeilen in der ersten Datei extrahieren, in denen die Position innerhalb des in der Sekundendatei angegebenen Bereichs liegt. Da die Position nur innerhalb eines bestimmten Chromosoms (chr) eindeutig ist, muss zuerst geprüft werden, ob die chr identisch sind (dh col1 in Datei 1 stimmt mit col3 in Datei2 überein)

Datei 1

chromosome position another....hundred.....columns
chr1       816 .....
chr1       991 .....
chr2       816 .....
chr2       880 .....
chr2       18768 .....
...
chr22      9736286 .....

Datei 2

name    identifier chromosome   start    end
GENE1   ucsc.86    chr1         800      900
GENE2   ucsc.45    chr2         700      1700
GENE3   ucsc.46    chr2         18000    19000

erwartete Ausgabe

chromosome position another....hundred.....columns
chr1       816 .....
chr2       816 .....
chr2       880 .....
chr2       18768 .....

Eine Zusammenfassung dessen, was ich vorhabe (halbcodiert):

(if $1(in file 1) matches $3(in file 2){            ##test if in the correct chr
   if ($2(in file 1) >= $4 && =< $5 (in file 2){    ##test if pos is in the range
         print $0 (in file 1)                       ##if so print the row from file1
   }
}

Ich bin froh, wenn ich verstehe, wie ich dieses Problem lösen kann, indem ich file1 in ein Array lege und position als Index verwende, aber dann habe ich immer noch ein Problem mit chr und außerdem ist file1 viel zu groß, um es in ein Array zu legen (obwohl ich 128 GB habe) RAM). Ich habe einige Dinge mit mehrdimensionalen Arrays ausprobiert, konnte aber auch nicht wirklich herausfinden, wie das geht.

Vielen Dank für all Ihre Hilfe.

Update 05.08.14 Eine dritte Zeile in Datei 2 wurde hinzugefügt, die einen weiteren Bereich im selben Chrom enthält. wie in der zweiten Zeile. Diese Zeile wird im folgenden Skript übersprungen.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage