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

Extracting Information of some columns from a large file based on ID in the another file

我有一个大文本文件(大约 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 命令,但没有用。你能帮我解决这个问题吗?

谢谢

您当然可以仅使用 AWK 来执行此操作,将数据读入散列 table 并测试您的字段是否在 table 中,但我发现这种启发式 容易得多

fgrep -wf ids.txt data.txt | awk '{ print , , , , ,  }'

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

仅使用 awk:

awk '
    NR == FNR {ids[]; next}
     in ids {print , , , , , }
' id.file data.file

处理这么大的文件需要时间。

您可能需要考虑 awk 实现:我知道 mawk 非常快:如果还没有,您可能需要安装它。