我有以下输入文件,
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
答案 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