我有一个很大的文本文件(大约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命令,但是没有用。您能帮我解决这个问题吗?
谢谢
答案 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
的速度非常快:如果尚未安装,则可能要安装它。