【问题标题】:Most efficient way to subset a file by a list of text patterns to match通过要匹配的文本模式列表对文件进行子集化的最有效方法
【发布时间】:2023-02-09 23:20:30
【问题描述】:

我有一个很大的制表符分隔文件(技术上是遗传变异的 VCF),其中有数百万行看起来像这样

locus1    1    15    0    0/0,21,2,2,;0
locus1    2    17    0    0/0,21,2,1,;0
locus2    1    10    0    0/1,21,2,2,;0
locus3    1    2     0    0/1,21,2,1,;0
...
locus123929    1    3    0    1/0,22,2,1,;0
locus123929    2    4    0    1/2,1,1,3,;0

我想对该原始文件进行子集化,以将来自基因座的所有行包含在列表中。例如,如果我的列表仅包含 locus1locus3locus123929,则最终文件将是:

locus1    1    15    0    0/0,21,2,2,;0
locus1    2    17    0    0/0,21,2,1,;0
locus3    1    2     0    0/1,21,2,1,;0
locus123929    1    3    0    1/0,22,2,1,;0
locus123929    2    4    0    1/2,1,1,3,;0

使用 bash 或 R 对这么大的文件进行子集化的最有效方法是什么? (注意,将整个文件读入内存,因为在 R 中非常非常慢,并且经常使系统崩溃。)

【问题讨论】:

    标签: r bash grep match


    【解决方案1】:

    我会使用awk

    awk -F'	' '
        BEGIN { a["locus1"]; a["locus3"]; a["locus123929"]; }
        $1 in a
    ' file
    

    bash 对于这项工作来说太慢了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-26
      • 1970-01-01
      相关资源
      最近更新 更多