input.txt中:
>block1
111111111111111111111
>block2
222222222222222222222
>block3
333333333333333333333
AWK命令:
awk '/>block2.*>/' input.txt
预期输出
222222222222222222222
然而,AWK什么也没有回来。我误解了什么?
谢谢!
答案 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