打印特定行,然后再打印更多行

打印特定行,然后再打印更多行

我正在尝试在文件中搜索某种模式,如果找到,我希望看到结果中的该行及其它 10 行。

到目前为止

grep -n pattern file | cut -d: f1 

现在不确定如何使用这个输出来进行打印,就像

sed -n result,(result+10)p file

如果图案有多行,则可能会发出一些指令。

任何帮助表示感谢

答案1

如果grep -A不起作用,请尝试

awk '/pattern/ {for(i=0;i<number_of_lines;i++){print;getline}}' <filename>

否则 sed 有另一个肮脏的解决方案

sed -n '/pattern/ {p;n;p;n;p;...}' <filename>这里 p-> 打印,n-> 转到下一行。所以 p 的数量就是要打印的行数

更新:

要用作函数,请写入 test.sh

jobcheck(){
  awk "/$1/"' {for(i=0;i<10;i++){print;getline}}' $2
}

然后就

source test.sh

跑步,

jobcheck "pattern" "file"

更新:根据 Jonathan Leffler 的建议,如果接下来的 10 行中的任何一行包含该模式,则计数应从该行开始,因此

pattern  ->start printing from here to next 10 lines
blah
blah
pattern  ->forget about the last 2 lines, start counting from here
blah 
blah

因此更新后的 awk 命令将如下所示

awk '/pattern/{max_line=NR+2} {if(NR<=max_line) print}' <filename>

同样,jobcheck 内部也会发生变化。干杯:)

答案2

使用 grep 2.10:

grep -A 10 "pattern" your_file

将在匹配后打印 10 行

来自grep 手册页

-数字

--after-context=num

打印匹配行后的 num 行尾随上下文。

使用 GNU awk 3.1.8:

awk '{if(a-->0) {print; next}} /pattern/{print; a=10}' your_file

答案3

我会用:

sed -n '/pattern/{N;N;N;N;N;N;N;N;N;N;p;}'

或者

sed '1,/pattern/{/pattern/!d;}' | sed '12,$d'

相关内容