【问题标题】:comparing values in multiple files比较多个文件中的值
【发布时间】:2012-05-31 02:54:29
【问题描述】:

我有两个文件,每个文件有 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 的第 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 脚本的任何建议...请帮助。

【问题讨论】:

  • @sebastian:通常当我必须比较 2 个文件的列时,我使用 shell 的 diff 或 comm 命令。但是由于这里我还有一个文件和两个额外的列,所以我对应该如何进行有点困惑。

标签: python bash shell awk text-processing


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

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

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

【讨论】:

    猜你喜欢
    • 2021-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-13
    • 2018-11-08
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多