如何使用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