我有以下格式的大型文本 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