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

时间:2016-08-11 16:39:43

标签: awk

input.txt中:

>block1
111111111111111111111
>block2
222222222222222222222
>block3
333333333333333333333

AWK命令:

awk '/>block2.*>/' input.txt

预期输出

222222222222222222222

然而,AWK什么也没有回来。我误解了什么?

谢谢!

3 个答案:

答案 0 :(得分:2)

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

awk '/^>block2$/ { nr=NR+1 } NR == nr { print }'

找到匹配项时跟踪记录编号加1;当当前记录号与记住的记录号匹配时,打印当前记录。

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

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

对于两个标记之间的所有行,如果该行与任一标记都不匹配,则将其打印出来。输出与样本数据文件相同。

答案 1 :(得分:2)

另一个awk

$ awk 'c&&c--; /^>block2/{c=1}' file
222222222222222222222

c指定匹配后要打印的行数。如果您想要两个标记之间的文本

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

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

答案 2 :(得分:0)

你可能意味着:

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