这是一个 fasta 格式的标题
>KRH76248 pep chromosome:Glycine_max_v2.1:1:47401227:47414434:-1 gene:GLYMA_01G141900 transcript:KRH76248 gene_biotype:protein_coding transcript_biotype:protein_coding description:hypothetical protein
MQKGREVRDNNIFEPRRFEDFGDFGFHRSRMPSLFGGRDPFDDPFFTDPFDSLFGPSSAS
RAMQKTNREKGIVIEEIDSDDEGADNGPETGEKDFDKKKSKSTMEPSIEYPDDDVNERKN
SDVTYKNDHCMAEPKARKFSFQTSRVTYGGIDGAYYTSTRIRRMGANGEVMEENKEADTT
TGQASHRRITRGIHDKGHSVLRKLDSDGKVDTTQTLHNLNEDELAGFEEAWKGNNMAQLP
GFDVHRKEGTMLT
其中,我只想保留 >GLYMA_01G141900 后跟序列,其余部分需要删除。
预期结果
>GLYMA_01G141900
MQKGREVRDNNIFEPRRFEDFGDFGFHRSRMPSLFGGRDPFDDPFFTDPFDSLFGPSSAS
RAMQKTNREKGIVIEEIDSDDEGADNGPETGEKDFDKKKSKSTMEPSIEYPDDDVNERKN
SDVTYKNDHCMAEPKARKFSFQTSRVTYGGIDGAYYTSTRIRRMGANGEVMEENKEADTT
TGQASHRRITRGIHDKGHSVLRKLDSDGKVDTTQTLHNLNEDELAGFEEAWKGNNMAQLP
GFDVHRKEGTMLT
我有 85000 千个不同的序列,标题也不同,那么如何在命令行中继续操作呢?提前谢谢您
为了帮助我找到了一个命令
sed -r '/>/S/.\gene:(.) transcript:.*/>\1/'test.fa
答案1
也许你想要
sed -E '/^>/s/.* gene:(\S+).*/>\1/' file
-E
和-r
是等效的,但我更喜欢它,-E
因为它对应于相同的 grep 选项。
\S+
在 GNU sed 中是“一个或多个非空白字符”。
答案2
首先删除文件中人为的“行尾”标记(我称之为原始标记):
cat raw | tr -d '\n'
我注意到,每条记录都以字符 >(即右尖括号)开头。所以我用它们来标记新行 '\n'
tr“>”“\n”
现在每条记录都在一行上。第一行是空白的。要删除它,我使用了 sed 命令:
sed'/^[[:space:]]*$/d'
现在我们可以使用 awk 了。它需要读取每条记录(行)并提取我们想要的内容。每条记录中有 11 个字段。同样,字段之间用字符 ':' 分隔,因此下面有 -F':' 选项:
awk -F':' '{OFS="\n";打印 $7,$11}'
(OFS 是输出字段分隔符 - 这里我们只是希望标题在一行上,其基因序列在它下面 - 因此命令中的 OFS="\n")
最后,我们要删除一些剩余的小写字符:
tr -d ‘az’
把所有内容放在一起就是完整的命令:
cat raw | tr -d '\n' | tr ">" "\n" | sed '/^[[:space:]]*$/d' | awk -F':' '{OFS="\n";print $7,$11}' | tr -d 'a-z '
如果您希望将最终结果放在新文件(例如 myoutput)中,只需向 myoutput 添加重定向命令即可。
答案3
使用 tr 和 awk 的另一种解决方案:
tr -d '\n' < inputfile | awk -F':' '{OFS="\n";print $7,$11}' | tr -d 'a-z' > outputfile