根据另一个文件中的ID从大文件中提取某些列的信息

时间:2018-10-23 16:31:47

标签: linux awk feature-extraction

我有一个很大的文本文件(大约15G),如下所示:

Chromosome  Start   Stop    Ref/Alt Identifier  Read Depth  Allele Frequencies  Het  HomoVar
1   10177   10177   -/C rs367896724 103152  0.425319    1490    320
1   10235   10235   -/A rs540431307 78015   0.00119808  6   0
1   10352   10352   -/A rs555500075 88915   0.4375  2025    83
1   10504   10505   A/T rs548419688 9632    0.000199681 1   0
1   10505   10506   C/G rs568405545 9676    0.000199681 1   0

我还有另一个文本文件,其中包含来自第5列的ID的子集,如下所示:

rs555500075
rs548419688

我想提取第二个文本文件中名称的第1、2、4、5、8和9列的相关信息。我尝试了一些简单的grep和awk命令,但是没有用。您能帮我解决这个问题吗?

谢谢

2 个答案:

答案 0 :(得分:2)

您当然可以只使用AWK进行此操作,将数据读入哈希表并测试您的字段是否在表中,但是我发现这种启发式很多更加容易:

fgrep -wf ids.txt data.txt | awk '{ print $1, $2, $4, $5, $8, $9 }'

这告诉grep将ids.txt中的数据用作data.txt中的模式。然后,使用AWK,我们过滤所需的列。

答案 1 :(得分:1)

只需awk:

awk '
    NR == FNR {ids[$1]; next}
    $5 in ids {print $1, $2, $4, $5, $8, $9}
' id.file data.file

处理这样的大文件将花费一些时间。

您可能需要考虑awk的实现:我知道mawk的速度非常快:如果尚未安装,则可能要安装它。