繁体   English   中英

awk:在匹配前后输出行

[英]awk: output with lines before and after a match

我刚刚开始使用bash,我已经问过这个问题,这是我在'while'循环中使用'grep' 遇到的一个问题: 使用两个文件时出现grep问题-我已经尝试了一切 由于以下问题,有人告诉我在循环中使用“ awk”而不是“ grep” :https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process- text-considered-bad-practice将'grep'循环替换为'awk'确实可行。 但是,我意识到我需要一个输出,该输出不仅保存匹配的行,还保存前1行和后2行。 我用谷歌搜索,但找不到方法。 有人知道如何在“ awk”中保存之前和之后的行吗?

谢谢你提前

假设您要在seq 40的输出中的29行之前和之后的2行(在您的环境中支持时,输出40行从1开始计数)。
您可以将awk

seq 40 | awk 'printnext>0 {print; printnext--}
              /29/ {print previous;print; printnext=2;}
              {previous=$0}'

您应该查看您的grep支持哪些选项:

seq 40 | grep -B1 -A2 "29"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM