如何在字符串之前和之后删除一行?

时间:2010-08-04 07:52:40

标签: awk

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

header
data1
data2
data3

如果data1是给定的字符串,我想删除整个记录。我认为这需要awk,我不知道。

2 个答案:

答案 0 :(得分:6)

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 && ! skip { for (i = 1; i <= 4; i++) print a[i] }
i == 4 { skip = 0; i = 0 }

答案 1 :(得分:0)

不知道您想要的输出和样本输入不足。

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