怎么把awk的结果作为grep的pattern参数?

发布于 2022-09-07 22:10:45 字数 283 浏览 11 评论 0

例如

grep 20180906834424 test.log | awk '{print $2}' 

上边的代码会产生一个结果 , 如何把这个结果作为grep的参数重新搜索test.log文件?

grep 20180906834424 test.log | awk '{print $2}'  | xargs grep PATTERN test.log

结果,awk的结果总是被用作文件名.怎么才能当成PATTERN呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

谁把谁当真 2022-09-14 22:10:45

用 xargs的选项-I指明需要将管道中的内容填充到后续命令的具体哪个参数位。

grep 20180906834424 test.log | awk '{print $2}' | xargs -I {} grep {} test.log

应该是可以满足你的需求的

跨年 2022-09-14 22:10:45

xargs -I{}会将命令行build成一个类似于for循环的执行过程,考虑使用拼接pattern的方式加快执行过程,只grep一次。

grep 20180906834424 test.log | awk '{print $2}' | sort -u | sed ':a;N;$!ba;s/\n/|/g;s/\(.*\)/(\1)/' | grep -E -f - test.log

egrep相当于grep -E的别名,拼接成(regex1|regex2|regex3...)这种形式,走grep -E/egrep的方式,一把grep,而不是for循环反复grep同一个文件,你测试一下time的执行时间对比下:

time grep # 后面那一串命令参数省略

对比下结果看看

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文