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

时间:2015-04-17 17:56:57

标签: 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 '/message-a/,/message-b/ {print NR, $0}' input.txt

2 个答案:

答案 0 :(得分:1)

以下是我要做的事情:

BEGIN {
   a="";
   n=0
}

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

/.*message-b/ {

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

// {
 a=""
}

awk -f test.awk data

数据

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及其行号保存该行。然后检查下一行是否包含message-b。如果出现其他行,我们会重置a,因为message-a后面没有message b

答案 1 :(得分:-1)

找出解决方案,

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