如何在文件中找到第三次出现的模式(注意:不在一行中)并删除包含该模式的行和n低于该值的行(例如,低于 5 行)。
例如,
COVER
fafjasfj
isfapifj
ajfsdaijf
COVER
oaijfeiahf
aasdf
fafadf
df
This is a COVER *
efjafa *
aifaidfj *
aifhaidfh *
idfhaifh *
aidfhiadhf *
aifhaifh
iafaishf
jgsjg
fbsfgbf
我想删除包含该模式第三次出现的完整行COVER
以及其下面的五行。这些行以*
s 表示。(注意:*
s 不是文件的一部分。
答案1
$ awk '$1=="COVER"{l++}l==3{l2++} l!=3 || l2>6' file
COVER
fafjasfj
isfapifj
ajfsdaijf
COVER
oaijfeiahf
aasdf
fafadf
df
aifhaifh
iafaishf
jgsjg
fbsfgbf
最后一条{print}
语句不是必需的,因为默认情况下,awk
在条件为真时打印当前行。