2012-05-24 50 views
0

我有兩個文件,每個文件有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列中的值範圍的重疊程度和文件2中第2列和第3列中的值範圍在文件1中的3)和文件2中文件1的第2列和第3列中值的範圍。

像這樣的輸出需要:

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腳本有什麼建議?請幫助。

+0

@sebastian:通常當我必須比較2個文件的列時,我使用shell的diff或comm命令。但是因爲這裏我有一個文件和兩個額外的列,所以我有點困惑,應該如何繼續。 – Angelo

回答

3
  1. file2以創建映射:名稱 - >的時間間隔,即,其結果是:ranges = {'chr1': [[8, 15], [10, 14], [32, 34]]}。如果每個名稱有很多間隔,那麼可以將它們合併爲:ranges = {'chr1': [[8, 15], [32, 34]]}

  2. 定義overlap(r1, r2)函數返回兩個間隔r1r2是否重疊。指定邊是否包含在重疊中。

  3. 對於file1中的每一行,找出是否存在重疊並打印適當的輸出。

+0

謝謝:) ........ – Angelo