根据正则表达式模式更改 fasta header
Change fasta header based on regex pattern
我有一个 fasta 文件 headers 有两种模式,像这样
>256_Org1
MAVVIIKDAADDSLARRD
>Org2_10005
DSLARRDMAVVIIKDAA
我只想保留单词并删除数字。我尝试使用建议的 awk 一个衬里,但用定界符 '_'
分隔并在后面用 {print }
给出 256
(错误)或 Org2
(正确)。我期望的输出是
>Org1
MAVVIIKDAADDSLARRD
>Org2
DSLARRDMAVVIIKDAA
在 textwrangler 中,我可以分两步替换它,1 和 \>\d+\_
到 >
和 2 \_\d+\n
到 \n
。但是我有几百个文件,想使用 one-liner。有什么建议吗?
使用 GNU sed:
sed -E 's/^>[0-9]+_/>/; s/_[0-9]+ *$//' file
输出:
>Org1
MAVVIIKDAADDSLARRD
>Org2
DSLARRDMAVVIIKDAA
以下 awk
解决方案也可能对您有所帮助。
awk 'NF && />/ && /[0-9]+/{sub(/_[0-9]+/,"");sub(/[0-9]+_/,"")} 1' Input_file
一个简单的sed
脚本:
/^>/!b # if it's not a FASTA header line, don't touch it
s/\([>_]\)[0-9]*_//g # zap internal all-numeric field
s/_[0-9]*$// # zap terminal all-numeric field if present
作为 sed
一行,您可以应用于所有文件:
sed -i~ -e '/^>/!b' -e 's/\([>_]\)[0-9]*_//g' -e 's/_[0-9]*$//' *.fasta
-i~
导致 sed
执行就地替换,将原始文件备份为文件名,最后附加波浪号。
并非所有 sed
实现都像多个 -e
参数,我对 [0-9]*
有点草率,因为并非所有 sed
方言都有表达 [0-9]+
在这里更合适。如果你有 sed -r
或 sed -E
那将是一个很好的改进,但同样,如果没有关于你所在平台的信息,我不想 post 推测性变化。
我有一个 fasta 文件 headers 有两种模式,像这样
>256_Org1
MAVVIIKDAADDSLARRD
>Org2_10005
DSLARRDMAVVIIKDAA
我只想保留单词并删除数字。我尝试使用建议的 awk 一个衬里,但用定界符 '_'
分隔并在后面用 {print }
给出 256
(错误)或 Org2
(正确)。我期望的输出是
>Org1
MAVVIIKDAADDSLARRD
>Org2
DSLARRDMAVVIIKDAA
在 textwrangler 中,我可以分两步替换它,1 和 \>\d+\_
到 >
和 2 \_\d+\n
到 \n
。但是我有几百个文件,想使用 one-liner。有什么建议吗?
使用 GNU sed:
sed -E 's/^>[0-9]+_/>/; s/_[0-9]+ *$//' file
输出:
>Org1 MAVVIIKDAADDSLARRD >Org2 DSLARRDMAVVIIKDAA
以下 awk
解决方案也可能对您有所帮助。
awk 'NF && />/ && /[0-9]+/{sub(/_[0-9]+/,"");sub(/[0-9]+_/,"")} 1' Input_file
一个简单的sed
脚本:
/^>/!b # if it's not a FASTA header line, don't touch it
s/\([>_]\)[0-9]*_//g # zap internal all-numeric field
s/_[0-9]*$// # zap terminal all-numeric field if present
作为 sed
一行,您可以应用于所有文件:
sed -i~ -e '/^>/!b' -e 's/\([>_]\)[0-9]*_//g' -e 's/_[0-9]*$//' *.fasta
-i~
导致 sed
执行就地替换,将原始文件备份为文件名,最后附加波浪号。
并非所有 sed
实现都像多个 -e
参数,我对 [0-9]*
有点草率,因为并非所有 sed
方言都有表达 [0-9]+
在这里更合适。如果你有 sed -r
或 sed -E
那将是一个很好的改进,但同样,如果没有关于你所在平台的信息,我不想 post 推测性变化。