如何使用awk在非连续行之间添加空行

如何使用awk在非连续行之间添加空行,awk,Awk,我有以下输入文件 time-1 message-a time-2 message-b time-3 message-c time-4 message-a time-5 message-b time-6 message-c 我想用行号和非连续行之间的空行生成输出。我怎样才能做到 预期产量 1 time-1 message-a 2 time-2 message-b 4 time-4 message-a 5 time-5 message-b 我尝试了以下方法,但仍然无法找出空行 awk '/me

我有以下输入文件

time-1 message-a
time-2 message-b
time-3 message-c
time-4 message-a
time-5 message-b
time-6 message-c
我想用行号和非连续行之间的空行生成输出。我怎样才能做到

预期产量

1 time-1 message-a
2 time-2 message-b

4 time-4 message-a
5 time-5 message-b
我尝试了以下方法,但仍然无法找出空行

awk '/message-a/,/message-b/ {print NR, $0}' input.txt

找到了解决办法

awk '/message-a/ { print "\n" NR, $0 } /message-b/ { print NR, $0 }' input.txt

下面是我要做的:

BEGIN {
   a="";
   n=0
}

/.*message-a/ {
   a=$0
   n=NR
   next;
}

/.*message-b/ {

   if( a != "")
   {
      print n, a;
      print NR, $0;
      print ""
      next;
   }
}

// {
 a=""
}

数据正在

time-1 message-a
time-2 message-b
time-3 message-c
time-4 message-a
time-5 message-b
time-6 message-c
time-7 message-a
time-8 message-c
time-9 message-b
time-0 message-a
time-a message-b
time-b message-c
产生:

1 time-1 message-a
2 time-2 message-b

4 time-4 message-a
5 time-5 message-b

10 time-0 message-a
11 time-a message-b
请注意,我们跳过了以
time-7
开头的行,因为它后面没有紧跟着
message-b


这样做的目的是用
message-a
及其行号保存该行。然后检查下一行是否包含
消息-b
。如果出现不同的行,我们会重置a,因为
消息-a
后面没有
消息b

第3行和第6行在这里是如何不连续的?您是否总是只希望打印
message-a
message-b
行,并删除其他行(更改为空白)?缺少你的例子或描述。
1 time-1 message-a
2 time-2 message-b

4 time-4 message-a
5 time-5 message-b

10 time-0 message-a
11 time-a message-b