我有一大块数据(一个文件)如下,每一行有不同的列数(用制表符分隔),数据结构如下 这个:
>NP_12345.1 matchnumber_1_RKHKK
>NP_56789.2 matchnumber_1_HGRR matchnumber_2_KQRHH matchnumber_3_RVRK matchnumber_4_HTHH
>XP_543421.1 matchnumber_1_RQRH ... matchnumber_m_RVRR
...
在上面的文件中,第1行有2列,第2行有5列,第3行有m+1列……;显然,文件的每一行都有“>;accessionID”和“matchnumber_i_XXX”。我想把每行的第1列添加到conresponding行中用“matchnumber”标记的每一列的头上,并以fasta格式打印出来,输出如下:
^{pr2}$有人能帮我吗?提前谢谢。在
注:当有单行文件时,例如,“a.txt”文件只有一行内容:
>NP_56789.2 matchnumber_1_HGRR matchnumber_2_KQRHH matchnumber_3_RVRK matchnumber_4_HTHH
我可以使用管道awk和sed命令来解析数据:
cat a.txt |awk -v OFS="\t" '{print $1$2,$1$3,$1$4,$1$5}' | sed 's/\t/\n/g' | sed 's/_/ /g' | sed 's/NP /NP_/g' | sed 's/matchnumber /matchnumber_/g' | sed 's/ /\n/g' > a.fasta
法斯塔就像是在觅食:
>NP_56789.2matchnumber_1
HGRR
>NP_56789.2matchnumber_2
KQRHH
>NP_56789.2matchnumber_3
RVRK
>NP_56789.2matchnumber_4
HTHH
当a.txt有多行数据时,我不知道如何解决这个问题。在
另一个perl one liner:
说明:
^{pr2}$从第二个字段}取出第一个字段的},然后打印。在
$2
循环到最后一个字段$NF
,使用match
和{matchnumber_1
和{在awk空间中,空格只是用于连接,
ORS
表示行尾,实际上等于\n
。r
是正则表达式匹配数组,r[0]表示整个匹配字符串,r[1]和r[2]表示第一对和第二对()
匹配的内容。--您可以将r
更改为所需的其他变量名。在至于regex,[0-9]表示任何单个数字,后面的
+
表示匹配1个或多个a前面表示的事物,这里表示1个或多个连续的数字。如上所述,括号只是用来捕捉组的内容,以供以后参考。每对括号匹配的内容都将保存到我提供的数组的一个元素中,这里是r
。在下面的^{} (对于^{} 扩展)可能适用于您:
相关问题 更多 >
编程相关推荐