我想在文件中搜索一个模式,并在找到该模式后打印5行.
我需要使用awk才能做到这一点.
例:
文件内容:
.
.
.
.
####PATTERN#######
#Line1
#Line2
#Line3
#Line4
#Line5
.
.
.
Run Code Online (Sandbox Code Playgroud)
如何解析文件并仅打印上述行?我是否使用包含"PATTERN"的行的NR并继续增加到5并在此过程中打印每一行.如果在Awk中有任何其他有效的扫描仪,请告诉我.
Pau*_*ce. 57
在AWK中执行此操作的另一种方法:
awk '/PATTERN/ {for(i=1; i<=5; i++) {getline; print}}' inputfile
Run Code Online (Sandbox Code Playgroud)
在sed:
sed -n '/PATTERN/{n;p;n;p;n;p;n;p;n;p}' inputfile
Run Code Online (Sandbox Code Playgroud)
要么
sed -n '/PATTERN/,+7p' inputfile
Run Code Online (Sandbox Code Playgroud)
该sed字符表示的计数器.使用少于您想要输出的行数.
Joh*_*web 14
awk '
{
if (lines > 0) {
print;
--lines;
}
}
/PATTERN/ {
lines = 5
}
' < input
Run Code Online (Sandbox Code Playgroud)
这会产生:
#Line1
#Line2
#Line3
#Line4
#Line5
Run Code Online (Sandbox Code Playgroud)
anu*_*ava 12
grep "PATTERN" search-file -A 5 如果决定给grep一个机会,你会为你做的.
编辑:您也可以使用脚本中的system()函数调用grep awk.
awk 救援!
用图案线打印(共6行)
$ awk '/^####PATTERN/{c=6} c&&c--' file
####PATTERN#######
#Line1
#Line2
#Line3
#Line4
#Line5
Run Code Online (Sandbox Code Playgroud)
跳过模式并打印下五行
$ awk 'c&&c--; /^####PATTERN/{c=5}' file
#Line1
#Line2
#Line3
#Line4
#Line5
Run Code Online (Sandbox Code Playgroud)
编辑:没有注意到PATTERN不应该是输出的一部分.
cat /etc/passwd | awk '{if(a-->0){print;next}} /qmaild/{a=5}'
Run Code Online (Sandbox Code Playgroud)
要么
cat /etc/passwd | awk ' found && NR-6 < a{print} /qmaild/{a=NR;found=1}'
Run Code Online (Sandbox Code Playgroud)
我能想到的最短的是:
cat /etc/passwd | awk 'a-->0;/qmaild/{a=5}'
Run Code Online (Sandbox Code Playgroud)
读取为趋于0./qmaild /设置为5 :-)