我有一个文件,例如" queries.txt"有硬回归分隔字符串。我想使用此列表在第二个文件中找到匹配项," biglist.txt"。
" biglist.txt"可以为" queries.txt"中的每个字符串添加多个匹配项。我想只返回每个查询的第一个匹配,并将其写入另一个文件。
grep -m 1 -wf queries.txt biglist.txt>输出
只给我输出一行。我应该输出与queries.txt相同的行数。
对此有何建议?非常感谢!我搜索了过去的问题,但在几分钟的阅读后没有找到一个完全相同的案例。
答案 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