我有一个文本文件,如下所示:
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