сравнение значений в нескольких файлах

У меня есть два файла, и каждый файл имеет 3 столбца и n строк (разное количество строк в каждом файле).

каждый выглядит так:

file1
chr1    12  32 
chr1    14  30
chr3    10002  89000 
chrx    5678900   987654

и это:

file2
chr1    8   15
chr1    10  14
chr1    32  34

второй и третий столбцы в каждом файле представляют начальное и конечное значения, а первый столбец — это имя.

Следовательно, если значение в первом столбце (файла 1) совпадает со значением в первом столбце файла 2, а затем скрипт должен вычислить, существует ли их перекрытие (любая степень перекрытия диапазона значений в столбцах 2 и 3 в файле 1 с диапазон значений в столбцах 2 и 3 файла 2) диапазон значений во втором и третьем столбцах из файла 1 в файле2.

Желателен такой вывод:

regions from file1 present in file 2

chr1    12  32   present 
chr1    14  30   present 
chr3    10002  89000  absent
chrx    5678900   987654 absent

Любые предложения по манипулированию awk или скрипту python... пожалуйста, помогите.


person Angelo    schedule 24.05.2012    source источник
comment
@sebastian: обычно, когда мне нужно сравнить столбцы двух файлов, я использую команды оболочки diff или comm. Но поскольку здесь у меня есть файл и еще два дополнительных столбца, я немного не понимаю, как мне действовать дальше.   -  person Angelo    schedule 24.05.2012


Ответы (1)


  1. Прочтите file2, чтобы создать сопоставление: имя -> интервалы, т. е. результат: ranges = {'chr1': [[8, 15], [10, 14], [32, 34]]}. Если есть много интервалов для каждого имени, то в качестве оптимизации вы можете объединить их: ranges = {'chr1': [[8, 15], [32, 34]]}.

  2. Определите функцию overlap(r1, r2), которая возвращает, перекрываются ли два интервала r1 и r2. Укажите, включены ли ребра в перекрытие.

  3. Для каждой строки в file1 узнайте, присутствует ли перекрытие, и выведите соответствующий вывод.

person jfs    schedule 24.05.2012