Ubuntu AWK提取列中具有相同单词的前两行

Ubuntu AWK提取列中具有相同单词的前两行,ubuntu,awk,grep,tabs,Ubuntu,Awk,Grep,Tabs,我需要从一个大的多列文件(500mb到1gb,\t分隔符)中提取前两行,其中包含一个特定列中出现的100.000多个单词的列表 现在我使用这样一个循环: House Cat 读取GREP时 做 grep-m2“${grep}”input.txt>output.txt; 完成

我需要从一个大的多列文件(500mb到1gb,\t分隔符)中提取前两行,其中包含一个特定列中出现的100.000多个单词的列表

现在我使用这样一个循环:

House
Cat
读取GREP时
做
grep-m2“${grep}”input.txt>output.txt;
完成
但这需要花费太多的时间(我需要对许多文件执行此操作),因此我正在寻找替代方案

一个简单的
fgrep-f-m2
不起作用,因为-m应用于合并命中的整个输出

我想awk可能是一个解决方案,但无法在网上找到帮助

例如,如果输入文件为:

Dog Bird House
Mouse Giraffe Cat
Mouse Rhino House
Lion Horse House
Dog Rat Cat
Dog Mice Cat
我想要这样的输出文件(行的顺序不相关):

我现在用的是这样一个单词列表:

House
Cat
但是如果这是一种只保留前两行的方法,那么第三列中的同一个单词就更好了! 注意:第三列上的文字将是唯一的,不会出现在任何其他列中

像这样的事情?:

$ awk -F"\t" 'NR==FNR{a[$0]=2;next}($3 in a)&&--a[$3]>=0' list input
输出:

Dog     Bird    House
Mouse   Giraffe Cat
Mouse   Rhino   House
Dog     Rat     Cat
解释:

$ awk -F"\t" '           # yes awk yes, fields tab delimited
NR==FNR {                # process the first file, list of words
    a[$0]=2              # hash every word, set initial value to 2
    next                 # on to the next word
}                        # process second file below this point
($3 in a) && --a[$3]>=0  # if 3rd field word in a and seen max once, output
' list input             # mind the file order

提供一个缩小的示例,其中包含一个包含几行的示例文件、一个包含2-3个单词(而不是100K)的列表以及该输入所需的输出。另请参见:请编辑并在问题中添加任何内容,而不是在评论中。感谢mate的帮助。这并不重要,因为第三列上的单词是唯一的,不会出现在其他列上。是否保留输出中单词列表的顺序?在本例中,您希望始终首先使用2条线,或者如果线对的顺序不同,您就可以了?OMG计算时间从超过1小时变为不到1分钟,谢谢!