递归grep结果和管道返回

时间:2012-06-01 03:26:07

标签: grep

我需要从文件中找到一些匹配的条件,并递归地找到以前匹配的文件中的下一个条件,我有类似的东西

input.txt中

123

22

33

您需要在以下文件中找到上述术语的文件,挑战是如果在10个文件中找到123,则应仅在这10个文件中搜索22,依此类推...... 文件示例如f1,f2,f3,f4 ..... f1200

所以就像我需要grep -w“123”f * | grep -w“123”| .....

不可能手动列出它们以便更方便吗?

3 个答案:

答案 0 :(得分:1)

您可以使用awk脚本解决此问题,我遇到了类似的问题,这将正常工作

awk '{ if(!NR){printf("grep -w %d f*|",$1)} else {printf("grep -w %d f*",$1)} }' input.txt | sh

它的作用是什么?

  • 逐行读取input.txt
  • 直到它最后一次记录,它打印grep -w%d | (注意有一个 在这里管道)
  • 然后被发送到shell执行并且结果被传回 回来
  • 当你到达终点时,避免使用管道

答案 1 :(得分:0)

或许采用元编程观点会有所帮助。让grep输出一系列grep命令。或者写一点PERL程序。也许Ruby,如果情绪适合的话。

答案 2 :(得分:0)

您可以使用grep -lw来编写匹配的文件名列表(请注意,它会在找到第一个匹配项后停止)。

捕获文件名列表,并将其用于循环中的下一次迭代。