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