bash - fasta 文件 : replace header with filename

标签 bash sed fasta

我想用 > 替换所有标题(以 >{filename} 开头) , 全部 *.fasta我的文件 directory然后将它们连接起来

我的 directory 的内容

speciesA.fasta
speciesB.fasta
speciesC.fasta

文件示例,speciesA.fasta

>protein1 description
MJSUNDKFJSKFJSKFJ
>protein2 anothername
KEFJKSDJFKSDJFKSJFLSJDFLKSJF
>protein3 somewordshere
KSDAFJLASDJFKLAJFL

我想要的输出(现在仅适用于 speciesA.fasta):

>speciesA
MJSUNDKFJSKFJSKFJ
>speciesA
KEFJKSDJFKSDJFKSJFLSJDFLKSJF
>speciesA
KSDAFJLASDJFKLAJFL

这是我的代码:

for file in *.fasta; do var=$(basename $file .fasta) | sed 's/>.*/>$var/' $var.fasta >>$var.outfile.fasta; done

但我得到的只是

>$var
MJSUNDKFJSKFJSKFJ
>$var
KEFJKSDJFKSDJFKSJFLSJDFLKSJF

[and so on ...]

我哪里做错了??

最佳答案

bash 循环是多余的。尝试:

awk '/^>/{print ">" substr(FILENAME,1,length(FILENAME)-6); next} 1' *.fasta

即使文件名包含特殊字符或正则表达式激活字符,这种方法也是安全的。

工作原理

  • /^>/{print ">"substr(FILENAME, 1, length(FILENAME)-6);下一步

    对于以 > 开始的任何行,执行花括号中的命令。第一个命令打印 > 后跟除了文件名的最后 6 个字母之外的所有字母。第二个命令 next 跳过该行的其余命令并跳转到 next 行重新开始。

  • 1

    这是 awk 的 print-the-line 的神秘简写。

例子

让我们考虑一个包含两个(相同的)测试文件的目录:

$ cat speciesA.fasta
>protein1 description
MJSUNDKFJSKFJSKFJ
>protein2 anothername
KEFJKSDJFKSDJFKSJFLSJDFLKSJF
>protein3 somewordshere
KSDAFJLASDJFKLAJFL
$ cat speciesB.fasta
>protein1 description
MJSUNDKFJSKFJSKFJ
>protein2 anothername
KEFJKSDJFKSDJFKSJFLSJDFLKSJF
>protein3 somewordshere
KSDAFJLASDJFKLAJFL

我们命令的输出是:

$ awk '/^>/{print ">" substr(FILENAME,1,length(FILENAME)-6); next} 1' *.fasta
>speciesA
MJSUNDKFJSKFJSKFJ
>speciesA
KEFJKSDJFKSDJFKSJFLSJDFLKSJF
>speciesA
KSDAFJLASDJFKLAJFL
>speciesB
MJSUNDKFJSKFJSKFJ
>speciesB
KEFJKSDJFKSDJFKSJFLSJDFLKSJF
>speciesB
KSDAFJLASDJFKLAJFL

输出具有替换并连接所有输入文件。

关于bash - fasta 文件 : replace header with filename,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44299366/

相关文章:

python - 将变量从 python 传递到 shell 脚本

linux - 无论 bash printf 输出如何,都将文本保留在适当的位置

python - 如何在两个非常大的fasta文件中找到具有相同名称的序列并将它们连接起来?

linux - 如何从linux命令 "who"中剪切子字符串

linux - 如何做一个 if 语句 bash linux

Sed 在 Windows 中创建不可删除的文件

php - 防止 sed 扩展变量

linux - 将 .txt 中的 html 结构转换为 .html 文件的 <body>

regex - 找到一行末尾的任意字母,删除换行符而不替换目标

python - 使用正则表达式拆分标题和内容