Ubuntu AWK提取列中具有相同单词的前两行
我需要从一个大的多列文件(500mb到1gb,\t分隔符)中提取前两行,其中包含一个特定列中出现的100.000多个单词的列表 现在我使用这样一个循环: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; 完成
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分钟,谢谢!