AWK-获取多行上两个字符串之间的值

AWK-获取多行上两个字符串之间的值,awk,Awk,input.txt: >block1 111111111111111111111 >block2 222222222222222222222 >block3 333333333333333333333 AWK命令: awk '/>block2.*>/' input.txt 预期产量 222222222222222222222 然而,AWK什么也没有返回。我误解了什么 谢谢 如果要打印包含>block2的行之后的行,则可以使用: awk '/^>block

input.txt:

>block1
111111111111111111111
>block2
222222222222222222222
>block3
333333333333333333333
AWK命令:

awk '/>block2.*>/' input.txt
预期产量

222222222222222222222
然而,AWK什么也没有返回。我误解了什么


谢谢

如果要打印包含
>block2
的行之后的行,则可以使用:

awk '/^>block2$/ { nr=NR+1 } NR == nr { print }'
找到匹配项时,跟踪记录编号加1;当当前记录编号与记住的编号匹配时,打印当前记录

如果您需要行
>block2
>block3
之间的所有行,那么您可以使用:

awk '/^>block2$/,/^>block3/ {if ($0 !~ /^>block[23]$/) print }'

对于两个标记之间的所有行,如果该行与任一标记都不匹配,请打印该行。输出与示例数据文件相同。

如果要打印包含
>block2
的行之后的行,则可以使用:

awk '/^>block2$/ { nr=NR+1 } NR == nr { print }'
找到匹配项时,跟踪记录编号加1;当当前记录编号与记住的编号匹配时,打印当前记录

如果您需要行
>block2
>block3
之间的所有行,那么您可以使用:

awk '/^>block2$/,/^>block3/ {if ($0 !~ /^>block[23]$/) print }'

对于两个标记之间的所有行,如果该行与任一标记都不匹配,请打印该行。输出与示例数据文件相同。

另一个
awk

$ awk 'c&&c--; /^>block2/{c=1}' file
222222222222222222222
c指定匹配后要打印的行数。如果希望文本位于两个标记之间

$ awk '/^>block3/{exit} s; /^>block2/{s=1}' file
222222222222222222222

如果有多个实例,并且您想要全部实例,只需将
exit
更改为
s=0
另一个
awk

$ awk 'c&&c--; /^>block2/{c=1}' file
222222222222222222222
c指定匹配后要打印的行数。如果希望文本位于两个标记之间

$ awk '/^>block3/{exit} s; /^>block2/{s=1}' file
222222222222222222222
如果有多个实例,并且您想要全部实例,只需将
exit
更改为
s=0

您的意思可能是:

$ awk '/>/{f=/^>block2$/;next} f' file
222222222222222222222
你可能是说:

$ awk '/>/{f=/^>block2$/;next} f' file
222222222222222222222

在您的输入中没有包含
>block2>
的行,因此无法打印任何内容。存在多个重复项,例如,尽管我可以快速找到的重复项都会在输出中包含>标题行。无论如何,更改这一点应该是微不足道的。为什么您希望模式的输出
2222222
,其中包括
block2
的非可选匹配,并且没有对匹配的文本应用编辑?您是否希望
grep X
输出
Y
?您的输入中没有包含
>block2>
的行,因此无法打印任何内容。存在多个重复项,就像我可以快速找到的那些重复项都会在输出中包含>标题行一样。无论如何,更改这一点应该是微不足道的。为什么您希望模式的输出
2222222
,其中包括
block2
的非可选匹配,并且没有对匹配的文本应用编辑?您是否希望
grep X
输出
Y