Awk grep多个值,但仅一个特定列

Awk grep多个值,但仅一个特定列,awk,grep,Awk,Grep,我有两个文件,targets.txt和maging.txt。txt是一个以制表符分隔的文件,有50万行,所有数字。Targets.txt包含一个包含100000个值(以及所有数字)的列表,我想在maging.txt中搜索这些值,但只在特定列中搜索。如果我匹配任何列,我将得到误报,因为我可能有一个数字匹配的列,而不是我感兴趣的 我可以使用类似于: awk '$3==someval' huge.txt 我不想在给定targets.txt大小的情况下执行for循环,并在输出文件中多次运行awk>>,

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

我可以使用类似于:

awk '$3==someval' huge.txt
我不想在给定targets.txt大小的情况下执行for循环,并在输出文件中多次运行awk>>,因为这是O(n^2)。在我指示grep只查看第3列时,是否有任何方法可以使用grep-F


在输出中,我需要来自maging.txt的完整行。

awk的惯用方法是将小文件存储在数组中,然后查找大文件

比如说,

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

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

有趣的是,这适用于除最后一列之外的所有maging.txt列。无论我做什么,它都拒绝匹配$NF列中的值。因此,如果我这样做:awk-F'\t''NR==FNR{a[$1];next}$NR在一个'target.txt gigage.txt中,它永远不会匹配。但是,如果我用$1替换$NR,并用N列替换$N-1,则该代码工作正常。
NR
是行号,最后一个字段是
$NF
typo-谢谢。由于某种原因,我仍然无法使它与最后一行一起工作