AWK: извлечь строки, если столбец в файле 1 попадает в диапазон, объявленный в двух столбцах другого файла
В настоящее время я борюсь с проблемой AWK, которую я еще не смог решить. У меня есть один огромный файл (30 ГБ) с геномными данными, который содержит список с позициями (объявлен в столбцах 1 и 2) и второй список, который содержит ряд диапазонов (объявлен в столбцах 3, 4 и 5). Я хочу извлечь все строки в первом файле, где позиция находится в пределах диапазона, объявленного в файле секунд. Поскольку позиция уникальна только в пределах определенной хромосомы (chr), сначала ее нужно проверить, если chr идентичны (т. Е. Col1 в файле 1 совпадает с col3 в файле2)
файл 1
chromosome position another....hundred.....columns
chr1 816 .....
chr1 991 .....
chr2 816 .....
chr2 880 .....
chr2 18768 .....
...
chr22 9736286 .....
файл 2
name identifier chromosome start end
GENE1 ucsc.86 chr1 800 900
GENE2 ucsc.45 chr2 700 1700
GENE3 ucsc.46 chr2 18000 19000
ожидаемый результат
chromosome position another....hundred.....columns
chr1 816 .....
chr2 816 .....
chr2 880 .....
chr2 18768 .....
Резюме того, что я собираюсь сделать (наполовину закодировано):
(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
}
}
Я любезен, если понимаю, как решить эту проблему, поместив file1 в массив и используя позицию в качестве индекса, но тогда у меня все еще есть проблема с chr, и, кроме того, file1 слишком большой, чтобы поместить в массив (хотя у меня 128GB БАРАН). Я пробовал некоторые вещи с многомерными массивами, но не мог понять, как это сделать.
Большое спасибо за вашу помощь.
Обновление 05.08.14 Добавлена третья строка в файле 2, содержащая другой диапазон в том же Chrom. как на второй линии. Эта строка пропущена в сценарии ниже.