我有两个文件,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的完整行。
答案 0 :(得分:2)
使用awk
的惯用方法是将小文件存储在数组中并查找大文件。
例如,
awk -F'\t' 'NR==FNR{a[$1]; next} $3 in a' Target.txt Huge.txt
对于您的内存,100k数字可能很大,如果是这样,您可以将Target.txt拆分为块,运行其中的多个并合并结果。对于现代计算机来说,它不应该是一个问题。