繁体   English   中英

如何使用awk和匹配的行本身在文件中的模式后打印连续2行

[英]How to print 2 consecutive lines after a pattern in file using awk and the matched line itself

在以下文本文件中,

####PATTERN#######
#Line1
#Line2
#Line3
#Line4
####PATTERN#######
#Line1
#Line2
#Line3
#Line4
#Line5
####PATTERN#######
#Line1
#Line2
#Line3
#Line4

我想提取匹配的行和接下来的2行。 输出应为:

####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2

如何实现呢?

谢谢,亚历克斯

awk ,按要求

awk '/PATTERN/{c=3}c&&c--' file

要么

awk '/PATTERN/{c=3}c-->0' file

但是使用grep更容易:

grep -A2 file

使用以下awk:

awk '/PATTERN/{s=1} s++ < 4' file

####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2
####PATTERN#######
#Line1
#Line2

有一种使用grep的简单方法。 您将在上下文之间找到--线,并可以使用反向匹配-v删除它们。 请参阅grep man page的文档。

grep -A2 "PATTERN" file | grep -v -- "^--$"

使用awk:

awk '/PATTERN/{c=NR+2}(NR<=c){print}' file

使用sed:

sed '/PATTERN/,+2!d' file

Perl单线

perl -ne 'print if (/PATTERN/ and $p=2) .. not $p--' file

暂无
暂无

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

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