比较多个文件中的值

时间:2012-05-24 13:56:51

标签: python bash shell awk text-processing

我有两个文件,每个文件有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列中值范围的任何重叠程度)在file1中,值范围在文件2的第2列和第3列中,以及文件2中文件1中第二列和第三列中值的范围。

需要这样的输出:

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脚本的任何建议......请帮助。

1 个答案:

答案 0 :(得分:3)

  1. 阅读file2以创建映射:name - >间隔即,结果是:ranges = {'chr1': [[8, 15], [10, 14], [32, 34]]}。如果每个名称有多个间隔,那么作为优化,您可以合并它们:ranges = {'chr1': [[8, 15], [32, 34]]}

  2. 定义overlap(r1, r2)函数,返回两个区间r1r2是否重叠。指定边缘是否包含在重叠中。

  3. 对于file1中的每一行,找出是否存在重叠并打印适当的输出。