0

整个文本文件如下所示:

aa
...
bb
...
bb
...
aa
...
bb
...

行后aa会有一行或多行bb.

我尝试了下面的命令,它可以很好地处理所有行aa和上面的行aa

grep -A 1 aa fileName

如何打印出所有行aa和上面aa的行以及第一行bb之后的行aa和该行之上的bb行?

编辑:需要bb为每次出现找到第一行(并且只有第一行) aa,还打印出行号。也许我重新提出这个问题:对于每一行,在此之后aa找到第一行,然后打印出这两个 line ,以及它们上面的行,以及行号。bbaaaabb

考虑下面的输入文件,第一列是行号,它不是输入文件的一部分

1 xxx
2 aa
3 xxxx
4 bb
5 bb
6 xxxx
7 aa
8 xxxx
9 xxxx
10 xxxx
11 bb
12 xxx
13 aa
14 xxx
15 bb

我想要输出:

1 xxx
2 aa
3 xxxx
4 bb
6 xxxx
7 aa
10 xxxx
11 bb
12 xxx
13 aa
14 xxx
15 bb
4

2 回答 2

1

这将完成这项工作:

awk '/aa/{f=1}/aa|bb/&&f{printf "%d %s\n%d %s\n",NR-1,a,NR,$0}{a=$0}/bb/{f=0}' 
于 2013-04-22T18:42:14.447 回答
0

命令

grep -C 1 aa fileName

将打印带有 aa 的所有行以及之前和之后的行

于 2013-04-22T18:48:30.253 回答