Ed *_*ton 20
以下习语描述了如何在给定特定模式匹配的情况下选择一系列记录:
a)从某种模式打印所有记录:
awk '/pattern/{f=1}f' file
Run Code Online (Sandbox Code Playgroud)
b)在某些模式后打印所有记录:
awk 'f;/pattern/{f=1}' file
Run Code Online (Sandbox Code Playgroud)
c)在某种模式后打印第N条记录:
awk 'c&&!--c;/pattern/{c=N}' file
Run Code Online (Sandbox Code Playgroud)
d)打印每条记录后,除了一些模式的第N个记录:
awk 'c&&!--c{next}/pattern/{c=N}1' file
Run Code Online (Sandbox Code Playgroud)
e)在某些模式后打印N条记录:
awk 'c&&c--;/pattern/{c=N}' file
Run Code Online (Sandbox Code Playgroud)
F)打印后,除了一些模式的N条记录每一条记录:
awk 'c&&c--{next}/pattern/{c=N}1' file
Run Code Online (Sandbox Code Playgroud)
g)从某种模式打印N条记录:
awk '/pattern/{c=N}c&&c--' file
Run Code Online (Sandbox Code Playgroud)
我从"F"改为变量名的"发现",以"C"为"计数"在适当情况下为这更多表现的是什么变量实际上是.
所以,你想要上面的"e":
awk 'c&&c--;/AAA/{c=81}' file
Run Code Online (Sandbox Code Playgroud)
使用grep有一种非常简单的方法:
grep -A 81 AAA input_file
Run Code Online (Sandbox Code Playgroud)
从手册页:
-A NUM, -
after -context = NUM 在匹配行后打印NUM行尾随上下文.在连续的匹配组之间放置一个包含组分隔符( - )的行.使用-o或--only-matching选项,这不起作用,并给出警告.
{c=81;next}c-->0
表达后添加:
awk '/AAA/{c=81;next}c-->0' somefile
Run Code Online (Sandbox Code Playgroud)
要打印匹配的行和以下81行:
awk '/AAA/{x=NR+81}(NR<=x){print}' input_file
Run Code Online (Sandbox Code Playgroud)
要打印以下81行而不是匹配行:
awk '/AAA/{x=NR+81;next}(NR<=x){print}' input_file
Run Code Online (Sandbox Code Playgroud)