递归grep结果并返回管道
我需要从一个文件中找到一些匹配的条件,然后递归地在以前匹配的文件中找到下一个条件,我有这样的东西 input.txt 123 二十二 三十三 您需要在以下文件中查找上述术语的文件,挑战是如果在10个文件中找到123,则应仅在这10个文件中搜索22个,依此类推。。。 例如f1、f2、f3、f4…..f1200等文件 所以我需要grep-w“123”f*| grep-w“123”|递归grep结果并返回管道,grep,Grep,我需要从一个文件中找到一些匹配的条件,然后递归地在以前匹配的文件中找到下一个条件,我有这样的东西 input.txt 123 二十二 三十三 您需要在以下文件中查找上述术语的文件,挑战是如果在10个文件中找到123,则应仅在这10个文件中搜索22个,依此类推。。。 例如f1、f2、f3、f4…..f1200等文件 所以我需要grep-w“123”f*| grep-w“123”| 手动列出它们是不可能的,因此没有更简单的方法吗?也许从元编程的角度来看会有所帮助。让grep输出一系列grep命令。或
手动列出它们是不可能的,因此没有更简单的方法吗?也许从元编程的角度来看会有所帮助。让
grep
输出一系列grep
命令。或者编写一个小PERL程序。如果心情合适,也许是Ruby。也许从元编程的角度来看会有所帮助。让grep
输出一系列grep
命令。或者编写一个小PERL程序。如果心情合适的话,也许是Ruby。您可以使用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执行,结果通过管道传回 支持
- 当你到达终点时,管道就被避开了
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执行,结果通过管道传回 支持
- 当你到达终点时,管道就被避开了
grep-lw
来写入匹配的文件名列表(请注意,它将在找到第一个匹配后停止)
您可以捕获文件名列表,并将其用于循环中的下一次迭代。您可以使用
grep-lw
写入匹配的文件名列表(请注意,它将在找到第一个匹配项后停止)
您捕获文件名列表并将其用于循环中的下一次迭代。这是否减少了它在每次迭代中必须扫描的文件?是的,它与grep-w“123”f*| grep-w“22”| grep-w“33”相同啊是的,我应该自己推断:)这是否减少了它在每次迭代时必须扫描的文件?是的,它与grep-w“123”f*| grep-w“22”| grep-w“33”相同是的,我应该自己推断:)