我有一大块数据(一个文件)如下,每一行都有不同数量的列(由制表符分隔),数据结构如下 这个:
>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”。我想将每一行的第一列添加到相应行中以“matchnumber”标记的每一列的头部,并以fasta格式打印出来,输出就像这样:
>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
>XP_543421.1matchnumber_1
RQRH
....
>XP_543421.1matchnumber_m
RVRR
...
谁能帮帮我?提前致谢。
注意:当有一行文件时,例如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
a.fasta 就像家禽一样:
>NP_56789.2matchnumber_1
HGRR
>NP_56789.2matchnumber_2
KQRHH
>NP_56789.2matchnumber_3
RVRK
>NP_56789.2matchnumber_4
HTHH
当a.txt有多行数据时,我不知道如何解决这个问题。
最佳答案
awk '{for(i=2;i<=NF;i++){print $1 gensub(/_([^_]+)$/,"\n\\1",1,$i)}}' file
关于python - 如何将每一行的第一列数据添加到相应行中由某些特定字符串或字符标记的每一列的标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54039452/