将 >GDRLR5L04EQY8D 3931|1166 流编辑为 >3931

将 >GDRLR5L04EQY8D 3931|1166 流编辑为 >3931

我有以下格式的大型文本 DNA 序列文件

>name 
AACTGGGCT

我需要解析当前具有额外信息和特殊字符的名称行,同时保持任何不以 > 开头的行不变

有(这是一个制表符,而不是“D 3”之间的空格):

>GDRLR5L04EQY8D 3931|1166
GACAAACGCTGGCGGGTGCATGAG

想:

>3931
GACAAACGCTGGCGGGTGCATGAG

我试图sed 's/\>*[[:blank:]]/>/g'摆脱第一部分,但这不起作用。可以gawk去掉后面的管道和数字吗?

答案1

使用awk

awk -F'[| ]' '{if ( $1 ~ /^>/ ) print ">"$2; else print $0}' file
>3931
GACAAACGCTGGCGGGTGCATGAG

如果第一个字符串的末尾与管道之前的数字集的开头之间的空格是 aTab而不是 a Space,则设置字段分隔符的正则表达式将为[|\t]

答案2

sed解决方案:

sed '/^>/s/>.* \([0-9]*\)|.*/>\1/' < existing-file > new-file

请注意,这/^>/会导致其后面的命令仅对以 > 开头的输入行进行操作,您似乎不知道sed可以这样做。

答案3

其他sed

$ sed -e 's/[^>].* \([0-9]*\)|.*/\1/' file
>3931
GACAAACGCTGGCGGGTGCATGAG

答案4

sed 's/>.* />/;s/|.*//
' <<\DATA
>GDRLR5L04EQY8D 3931|1166
GACAAACGCTGGCGGGTGCATGAG
DATA

输出

>3931
GACAAACGCTGGCGGGTGCATGAG

相关内容