根据另一个文件中的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
非常快:如果还没有,您可能需要安装它。
我有一个大文本文件(大约 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
非常快:如果还没有,您可能需要安装它。