zgrep文件中每行的第一次匹配

zgrep文件中每行的第一次匹配,grep,Grep,我试图使用zgrep-f为查询文件的每一行查找单个待搜索文件中的第一个匹配项。由于要搜索的文件非常庞大(~3GB),因此,如果zgrep找到当前查询行的一个匹配项,它将停止该搜索,然后在查询文件的下一行上搜索模式,这一点至关重要。我的问题是“zgrep-m1-f”只会找到查询文件的第一个查询行的第一个匹配项;然后它完全停止读取查询文件。是否有其他方法可以组合-m和-f(z)grep选项,从而更有效地执行此搜索 以下是我的1000行查询文件结构(wordList.txt)中的两行: 我的300万行

我试图使用zgrep-f为查询文件的每一行查找单个待搜索文件中的第一个匹配项。由于要搜索的文件非常庞大(~3GB),因此,如果zgrep找到当前查询行的一个匹配项,它将停止该搜索,然后在查询文件的下一行上搜索模式,这一点至关重要。我的问题是“zgrep-m1-f”只会找到查询文件的第一个查询行的第一个匹配项;然后它完全停止读取查询文件。是否有其他方法可以组合-m和-f(z)grep选项,从而更有效地执行此搜索

以下是我的1000行查询文件结构(wordList.txt)中的两行:

我的300万行(?)中有三行需要搜索的文件(GoogleNews-vectors-negative300.txt.gz)

不幸的是,这个命令:

% zgrep -m 1 -f wordList.txt GoogleNews-vectors-negative300.txt.gz > myVectors.txt
仅返回第一个查询的第一个匹配项:

dog 0.017198 -0.007493 -0.057982 0.054051 -0.028336
鉴于此命令(不带“-m 1”):

返回完整的预期输出,但需要无限长的时间,因为它每次都搜索整个文件:

dog 0.017198 -0.007493 -0.057982 0.054051 -0.028336
cat 0.004059 0.067190 -0.093874 0.071370 0.038900

更新:我最后编写了一个小bash脚本作为单个查询“zgrep-m1”的包装器,因此我将它粘贴到下面,以防其他人遇到类似问题。加上短路功能,我的搜索速度提高了约95%:

#!/bin/sh
for L in `cat wordList.txt`; do
    zgrep -m 1 "$L " GoogleNews-vectors-negative300.txt.gz >> myVectors.txt
done
% zgrep -f wordList.txt GoogleNews-vectors-negative300.txt.gz > myVectors.txt
dog 0.017198 -0.007493 -0.057982 0.054051 -0.028336
cat 0.004059 0.067190 -0.093874 0.071370 0.038900
#!/bin/sh
for L in `cat wordList.txt`; do
    zgrep -m 1 "$L " GoogleNews-vectors-negative300.txt.gz >> myVectors.txt
done