python - 如何将每一行的第一列数据添加到相应行中由某些特定字符串或字符标记的每一列的标题?

标签 python regex bash awk sed

我有一大块数据(一个文件)如下,每一行都有不同数量的列(由制表符分隔),数据结构如下 这个:

>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有多行数据时,我不知道如何解决这个问题。

最佳答案

以下gawk (对于 gensub 扩展名)可能适合您:

awk '{for(i=2;i<=NF;i++){print $1 gensub(/_([^_]+)$/,"\n\\1",1,$i)}}' file

关于python - 如何将每一行的第一列数据添加到相应行中由某些特定字符串或字符标记的每一列的标题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54039452/

相关文章:

java - 捕获多行字符组

Python 值错误 : too many values to unpack for crawler

python - 如何在 Python 中导入包和模块而不出现任何错误?

python - pygame 中出现游戏结束屏幕后重新启动贪吃蛇游戏

regex - Lex 程序从给定文本中删除单行和多行注释

bash - 如何在期望中转义方括号?

python - 尝试构建 --onefile 时 PyQt 出现 PyInstaller 错误

javascript - RegEx 从 CSS 背景样式中提取 URL

linux - 如何在/dev以外的其他目录中创建lvm卷

bash - 如何强制 wget 跳过指向父元素的链接?