Awk 如何删除字符串前面的一行和后面的两行?

Awk 如何删除字符串前面的一行和后面的两行?,awk,Awk,假设您在文本文件中有如下记录: header data1 data2 data3 标题 数据1 数据2 数据3 如果data1是给定的字符串,我想删除整个记录。我认为这需要我不知道的awk。awk可以通过将记录分隔符设置为空字符串来处理这些多行记录: BEGIN { RS = ""; ORS = "\n\n" } $2 == "some string" { next } # skip this record { print } # print (non-skipped) record 您可以将

假设您在文本文件中有如下记录:

header data1 data2 data3 标题 数据1 数据2 数据3
如果data1是给定的字符串,我想删除整个记录。我认为这需要我不知道的awk。

awk可以通过将记录分隔符设置为空字符串来处理这些多行记录:

BEGIN { RS = ""; ORS = "\n\n" }
$2 == "some string" { next } # skip this record
{ print } # print (non-skipped) record
您可以将其保存在文件中(例如
remove.awk
),并使用
awk-f remove.awk data.txt>newdata.txt执行它

这假设您的数据的格式为:

header
data
....

header
data
...
如果记录之间没有空行,则需要手动拆分记录(每个记录有4行):

{a[++i]=$0}
i==2&&a[i]==some string{skip=1}

i==4&!跳过{for(i=1;i),而不知道需要什么输出,样本输入不足

awk 'BEGIN{RS=""}!/data1/' file
awk 'BEGIN{RS=""}!/data1/' file