我有兩個文件,我想重疊一些範圍,並根據完全匹配和部分匹配檢索結果。一個例子會說清楚。R,awk,sed:合併bin和輸出中央重疊,然後中央+相鄰重疊
的fileA:
chr1 200 400 E1
chr1 400 600 E2
chr1 600 800 E3
chr2 200 300 E4
FILEB:
chr1 100 250 TF1 G1
chr1 250 650 TF2 G2
chr1 450 850 TF3 G3
輸出:
chr1 100 250 TF1 G1 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 400 600 E2
chr1 250 650 TF2 G2 chr1 600 800 E3
chr1 450 850 TF3 G3 chr1 400 600 E2
chr1 450 850 TF3 G3 chr1 600 800 E3
Uptil這一步我可以做的事情,但接下來的步驟是,我需要你的幫助。
在這裏,我想第一子集是僅具有(例如輸出文件的第1行,不考慮到該重疊尺寸)1個匹配的那些行
- 如果有兩個匹配(例如,5行和6個輸出),那麼具有最多重疊的'中央行'(與重疊爲150的行5相比,重疊爲第6行)
- 如果存在3個或多於3個匹配(例如,第3行輸出完全重疊,但第2行和第4行是相鄰行,分別有部分重疊,分別爲150和50),那麼我只想返回在這種情況下,中央行將是行3。
後來,我想要檢索的第一鄰居,然後第二neigbors等,因爲在實際工作中的數據集是可能發生的文件B中一個二進制位將在文件A.
最大的5個或7箱重疊所以,基本上我想要的是首先得到所有的中央重疊,然後中央+第一個鄰居,然後中央+第二個鄰居,等等。
按照此理,我的第一個結果將是:
結果1(中央重疊):
chr1 100 250 TF1 G1 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 400 600 E2
chr1 450 850 TF3 G3 chr1 600 800 E3
結果2(中央+ 1的鄰居):
chr1 100 250 TF1 G1 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 200 400 E1
chr1 250 650 TF2 G2 chr1 400 600 E2
chr1 250 650 TF2 G2 chr1 600 800 E3
chr1 450 850 TF3 G3 chr1 400 600 E2
chr1 450 850 TF3 G3 chr1 600 800 E3
如果可能的話,我想單獨檢索相鄰的行,而不是中心的行。
任何幫助將不勝感激。謝謝。
非常感謝@karakfa抽出時間幫助我。 – Newbie
不客氣。向前付款... – karakfa