有没有办法根据以前的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
Run Code Online (Sandbox Code Playgroud)
首先,我想grep整个日志文件文件,看看是否存在"xyz occured".如果是,我想获取该事件的ID号,并通过该ID号查找状态代码来查找文件中的所有行.
我想象我可以使用xargs或类似的东西,但我似乎无法让它工作.
grep "xyz occured" file.log | awk '{ print $2 }' | xargs grep "status code" | awk '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
关于如何实际做到这一点的任何想法?
B.K*_*cis 24
grep-grep-ed输出的一般答案:
grep 'patten1' *.txt | grep 'pattern2'
Run Code Online (Sandbox Code Playgroud)
注意第二个grep没有指向文件.
更多关于酷grep的东西在这里
你快到了.但是,虽然有时可以使用xargs来执行您想要的操作(取决于下一个命令如何获取其参数),但您实际上并没有使用它来grep您刚刚提取的ID.你需要做的是获取第一个grep(包含ID代码)的输出,并在下一个grep的表达式中使用它.就像是:
grep "^ID `grep 'xyz occured' file.log | awk '{print $2}'` status code" file.log
Run Code Online (Sandbox Code Playgroud)
显然,另一个选择是编写一个脚本来执行此操作,a-la Ed的建议.
| 归档时间: |
|
| 查看次数: |
53521 次 |
| 最近记录: |