сравняване на стойности в множество файлове

Имам два файла и всеки файл има 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: обикновено, когато трябва да сравня колоните на 2 файла, използвам diff или comm команди на shell. Но тъй като тук имам файл и две допълнителни колони, малко съм объркан как да продължа.   -  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