使用awk删除多个+1的所有行

使用awk删除多个+1的所有行

我有一个文本文件,如下所示:

header
p1
p2
p3
header
p4
p5
p6
header
p7
p8
p9

我想删除除第一个标头之外的所有标头,因此结果将是:

header
p1
p2
p3
p4
p5
p6
p7
p8
p9

我认为这可以通过打印所有不是 4、+1 倍数的行来实现(即不要打印行 4+1、8+1、12+1 等)。我知道如何不打印 4 倍数的行:

cat tmp2 | awk '{if((NR % 4 != 0)) {print $0}}'

但我不知道如何使它不打印 4 的倍数 +1。我认为解决方案应该很简单,但我对如何到达那里有点困惑。

答案1

有很多方法可以做算术,我可能会做

awk 'NR==1 || (NR-1)%4' tmp2

因为它使意图显而易见。

答案2

删除出现在除第一行之外的任何行中的标题行:

awk 'NR==1 || !/header/' infile

相关内容