awk:匹配前后的行输出

时间:2017-08-16 18:41:20

标签: unix awk fastq

我刚刚开始使用bash而且我已经问过这个问题我使用循环'while'和'grep'的问题: grep issues when using two files - I've tried everything。 由于以下问题,我被告知在循环中使用'awk'而不是'grep' https://unix.stackexchange.com/questions/169716/why-is-using-a-shell-loop-to-process-text-considered-bad-practice 用'awk'替换循环中的'grep'确实奏效了。但是,我意识到我需要一个输出,不仅可以保存匹配的行,还可以保存前一行和后一行的1行。 我用Google搜索,但我找不到办法。任何人都知道如何在'awk'之前和之后保存线条?

谢谢你提前

1 个答案:

答案 0 :(得分:0)

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

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

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

seq 40 | grep -B1 -A2 "29"