0

2 つのファイルがあり、各ファイルには 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

各ファイルの 2 列目と 3 列目は開始値と終了値を表し、1 列目は名前です。

したがって、(ファイル 1 の) 最初の列の値がファイル 2 の最初の列の値と一致する場合、スクリプトは重複が存在するかどうかを計算する必要があります (ファイル 1 の列 2 と 3 の値の範囲とファイル 2 の列 2 と 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 スクリプトに関する提案...助けてください。

4

1 に答える 1

3
  1. マッピングを作成するために読み取りfile2ます: name -> interval つまり、結果は:ranges = {'chr1': [[8, 15], [10, 14], [32, 34]]}です。各名前に多くの間隔がある場合、最適化としてそれらをマージできます: ranges = {'chr1': [[8, 15], [32, 34]]}.

  2. 2 つの区間と重複overlap(r1, r2)するかどうかを返す関数を定義します。エッジをオーバーラップに含めるかどうかを指定します。r1r2

  3. の各行file1について、オーバーラップが存在するかどうかを調べ、適切な出力を出力します。

于 2012-05-24T14:22:39.247 に答える