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