2012-06-01 37 views
1

我需要找到从文件中的一些配套条件和递归找到先前匹配文件的下一个条件,我有这样的事情递归grep的结果和回水管

input.txt中

,你需要找到上述条款中的下列文件中的文件,面临的挑战是,如果123是缶nd在说10个文件中,只应该在这10个文件中搜索22等... 文件的例子就像f1,f2,f3,f4 ..... f1200

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

它不可能手动列出它们,所以更简单的方法?

回答

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执行和结果将通过管道回 背
  • ,当你到达终点管道避免
+0

这是否减少了它在每次迭代时必须扫描的文件? –

+0

是的,它的作用与grep -w“123”相同f * | grep -w“22”| grep -w“33” –

+0

嗯,是的,我应该有理由说我自己:) –

0

也许采取元编程观点会有所帮助。请grep输出一系列grep命令。或者写一点PERL程序。也许红宝石,如果心情适合。

0

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

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

+0

感谢这个方向 – user1429793