编辑文本文件头(Fasta 格式)

编辑文本文件头(Fasta 格式)

这是一个 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

  1. 首先删除文件中人为的“行尾”标记(我称之为原始标记):

    cat raw | tr -d '\n'

  2. 我注意到,每条记录都以字符 >(即右尖括号)开头。所以我用它们来标记新行 '\n'

    tr“>”“\n”

  3. 现在每条记录都在一行上。第一行是空白的。要删除它,我使用了 sed 命令:

    sed'/^[[:space:]]*$/d'

  4. 现在我们可以使用 awk 了。它需要读取每条记录(行)并提取我们想要的内容。每条记录中有 11 个字段。同样,字段之间用字符 ':' 分隔,因此下面有 -F':' 选项:

    awk -F':' '{OFS="\n";打印 $7,$11}'

(OFS 是输出字段分隔符 - 这里我们只是希望标题在一行上,其基因序列在它下面 - 因此命令中的 OFS="\n")

  1. 最后,我们要删除一些剩余的小写字符:

    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

相关内容