擅长:python、mysql、java
<pre><code>$ cat jfile
>NP_12345.1 matchnumber_1_RKHKK
>NP_56789.2 matchnumber_1_HGRR matchnumber_2_KQRHH matchnumber_3_RVRK matchnumber_4_HTHH
$ awk -F"\t" '{for(i=2;i<=NF;i++){match($i,"(matchnumber_[0-9]+)_(.*)",r);print $1 r[1] ORS r[2];}}' jfile
>NP_12345.1matchnumber_1
RKHKK
>NP_56789.2matchnumber_1
HGRR
>NP_56789.2matchnumber_2
KQRHH
>NP_56789.2matchnumber_3
RVRK
>NP_56789.2matchnumber_4
HTHH
</code></pre>
<p>从第二个字段<code>$2</code>循环到最后一个字段<code>$NF</code>,使用<code>match</code>和{<cd4>}取出第一个字段的<code>matchnumber_1</code>和{<cd6>},然后打印。在</p>
<p>在awk空间中,空格只是用于连接,<code>ORS</code>表示行尾,实际上等于<code>\n</code>。<code>r</code>是正则表达式匹配数组,r[0]表示整个匹配字符串,r[1]和r[2]表示第一对和第二对<code>()</code>匹配的内容。--您可以将<code>r</code>更改为所需的其他变量名。在</p>
<p>至于regex,[0-9]表示任何单个数字,后面的<code>+</code>表示匹配1个或多个a前面表示的事物,这里表示1个或多个连续的数字。如上所述,括号只是用来捕捉组的内容,以供以后参考。每对括号匹配的内容都将保存到我提供的数组的一个元素中,这里是<code>r</code>。在</p>