使用 awk 或 sed 替换 fasta 标头中的单个字符

Dod*_*oda 1 bash awk sed bioinformatics fasta

我正在 bash 中使用一个 fasta 文件,该文件的标题以“>”开头,以“C”或“+”结尾。就像这样:

>chr1:35031657-35037706+
GGTGGACTAGCCAGTGAATGTCAACGCGTCCCTA
CCTAAGGCGATATCCGCAGCCGCCCGCGTCCCTA
>chr1:71979382-71985425C
agattaaatgaactattacacataaagtgcttac
ttacacataaagtgcttacgaactattacaggga
Run Code Online (Sandbox Code Playgroud)

我想使用 awk (gsub?) 或 sed 将标题的最后一个字符更改为“+”(如果它是“C”)。基本上我希望所有序列都以“+”结尾。没有C。

期望的输出:

>chr1:35031657-35037706+
GGTGGACTAGCCAGTGAATGTCAACGCGTCCCTA
CCTAAGGCGATATCCGCAGCCGCCCGCGTCCCTA
>chr1:71979382-71985425+
agattaaatgaactattacacataaagtgcttac
ttacacataaagtgcttacgaactattacaggga
Run Code Online (Sandbox Code Playgroud)

序列不需要改变任何东西。我认为这非常简单,但我自己很难使用其他帖子来做到这一点。我知道这awk '/^>/ && /C$/{print $0}'将打印以“>”开头并以“C”结尾的标题,但我不确定如何用“+”替换所有这些“C”。

感谢您的帮助!

Gor*_*son 7

我认为这会更容易做到sed

sed '/^>/ s/C$/+/'
Run Code Online (Sandbox Code Playgroud)

翻译:在以“>”开头的行中,将行末尾的“C”替换为“+”。请注意,如果“C”不匹配,则不会出现错误,它只是不会替换任何内容。此外,与 不同的是awksed它在处理后自动打印每一行。

如果您确实想使用awk,则等效内容是:

awk '/^>/ {sub("C$","+",$0)}; {print}'
Run Code Online (Sandbox Code Playgroud)