grep使用列表查找文件中的匹配项,并仅打印列表中每个字符串的第一个匹配项

时间:2013-12-19 01:39:41

标签: grep

我有一个文件,例如" queries.txt"有硬回归分隔字符串。我想使用此列表在第二个文件中找到匹配项," biglist.txt"。

" biglist.txt"可以为" queries.txt"中的每个字符串添加多个匹配项。我想只返回每个查询的第一个匹配,并将其写入另一个文件。

grep -m 1 -wf queries.txt biglist.txt>输出

只给我输出一行。我应该输出与queries.txt相同的行数。

对此有何建议?非常感谢!我搜索了过去的问题,但在几分钟的阅读后没有找到一个完全相同的案例。

3 个答案:

答案 0 :(得分:7)

如果你想在每个文件后“重置计数器”,你可以

cat queries.txt | xargs -I{} grep -m 1 -w {} biglist.txt > output

这使用xargs为输入中的每一行调用grep一次...应该为你做的伎俩。

说明:

cat queries.txt   - produce one "search word" per line
xargs -I{}        - take the input one line at a time, and insert it at {}
grep -m 1 -w      - find only one match of a whole word
{}                - this is where xargs inserts the search term (once per call)
biglist.txt       - the file to be searched
> output          - the file where the result is to be written

答案 1 :(得分:1)

没有xargs的替代方法(确实应该学习): (此方法假设在queries.txt中的行中没有空格)

cat queries.txt | while read target; do grep -m 1 $target biglist.txt; done > outr

答案 2 :(得分:0)

我可能不太了解您的问题,但听起来像这样的事情可能有用。

cat queries.txt | while read word; do grep "$word" biglist.txt | tee -a output.txt; done