有没有办法根据前一个 grep 的结果执行 grep,而不仅仅是将多个 grep 相互传递。例如,假设我有以下日志文件输出:
ID 1000 xyz occured
ID 1001 misc content
ID 1000 misc content
ID 1000 status code: 26348931276572174
ID 1000 misc content
ID 1001 misc content
首先,我想 grep 整个日志文件文件,看看是否存在“xyz 发生”。如果是,我想获取该事件的 ID 号,并通过 grep 遍历文件中具有该 ID 号的所有行来查找状态代码。
我想象我可以使用 xargs 或类似的东西,但我似乎无法让它工作。
grep "xyz occured" file.log | awk '{ print $2 }' | xargs grep "status code" | awk '{print $NF}'
关于如何实际执行此操作的任何想法?
原文由 Sonoman 发布,翻译遵循 CC BY-SA 4.0 许可协议
您快到了。但是,虽然 xargs 有时可以用来做你想做的事(取决于下一个命令如何接受它的参数),但你实际上并没有使用它来 grep 你刚刚提取的 ID。您需要做的是获取第一个 grep 的输出(包含 ID 代码)并在下一个 grep 的表达式中使用它。就像是:
显然,另一种选择是编写一个脚本一次性完成此操作,a-la Ed 的建议。