Awk 在新文件中的模式之间提取文本

Awk 在新文件中的模式之间提取文本,awk,Awk,我正在尝试分析具有以下结构的文件: AAAAA 123 456 789 AAAAA 555 777 999 777 其思想是检测“AAAAA”模式并提取以下两行。完成此操作后,我想附加下一个“AAAAA”模式和以下两行,因此最后一个文件将如下所示: AAAAA 123 456 AAAA 555 777 考虑到最后一个不会以“AAAAA”模式结束 你知道怎么做吗?我使用过sed,但我不知道如何选择模式后要保留的行数 AWK的Fo示例: awk '/'$AAAAA'/,/'$AAAAA'/'

我正在尝试分析具有以下结构的文件:

AAAAA
123
456
789
AAAAA
555
777
999
777
其思想是检测“AAAAA”模式并提取以下两行。完成此操作后,我想附加下一个“AAAAA”模式和以下两行,因此最后一个文件将如下所示:

AAAAA
123
456
AAAA
555
777
考虑到最后一个不会以“AAAAA”模式结束

你知道怎么做吗?我使用过sed,但我不知道如何选择模式后要保留的行数

AWK的Fo示例:


awk '/'$AAAAA'/,/'$AAAAA'/' INPUTFILE.txt
但是这将只提取两个AAAAA之间的所有文本


谢谢

您可以试试这个
awk


awk'$1==“AAAAA”{n=NR+2}NRgrep
命令有一个标志,在每次匹配后打印行。例如:

grep AAAAA --after 2 <file>
grep AAAAA——2之后
除非我误解了,否则这应该符合您的要求,并且比
awk
脚本简单得多。

使用
sed

sed -n '/AAAAA/{N;N;p}' file.txt
使用智能计数器

$ awk '/AAAAA/{n=3} n&&n--' file

AAAAA
123
456
AAAAA
555
777
欺骗

mawk/mawk2/gawk 'BEGIN { FS = OFS = "AAAAA\n"; RS = "^$"; 

    } END { for(x=2; x<= NF; x++) { print $(x) } }'

谢谢它可以工作,但是我如何删除写在每行右边的行号?对不起,行号写在哪里?这只是打印没有任何行号的每一行。可能是
sed'/AAAAA/!DNn'文件
1 2 3 \n 4 5 6 \n 7 8 9 \n     # spaced out for readability