grep多个值但只有特定列

时间:2016-08-02 18:14:17

标签: awk grep

我有两个文件,targets.txt和huge.txt。 Huge.txt是一个制表符分隔的文件,包含50米行,所有数字。 Targets.txt包含我想在huge.txt中搜索但仅在特定列中搜索的100,000个值(也是所有数字)的列表。如果我匹配任何列,我将得到误报,因为我可能有一个数字匹配列,而不是我感兴趣的列。

我可以使用类似的东西:

awk '$3==someval' huge.txt

考虑到targets.txt的大小,我不想做一个for循环,并且运行awk多次>>输入文件,因为那是O(n ^ 2)。有没有办法使用grep -F,我指示grep只查看第3列?

在输出中我想要来自huge.txt的完整行。

1 个答案:

答案 0 :(得分:2)

使用awk的惯用方法是将小文件存储在数组中并查找大文件。

例如,

awk -F'\t' 'NR==FNR{a[$1]; next} $3 in a' Target.txt Huge.txt

对于您的内存,100k数字可能很大,如果是这样,您可以将Target.txt拆分为块,运行其中的多个并合并结果。对于现代计算机来说,它不应该是一个问题。