根据正则表达式模式更改fasta标头

时间:2018-01-04 05:53:19

标签: regex awk fasta

我有一个带有两个模式的标题的fasta文件,比如这个

>256_Org1 
MAVVIIKDAADDSLARRD

>Org2_10005 
DSLARRDMAVVIIKDAA

我想只保留单词并删除数字。我尝试使用awk建议的一个衬垫,但是用分隔符'_'分隔并跟随{print $1}分隔256(错误)或Org2(右)。我期望的输出是

>Org1 
MAVVIIKDAADDSLARRD

>Org2 
DSLARRDMAVVIIKDAA

在textwrangler中,我可以分两步替换它, 1 \>\d+\_> 2 \_\d+\n\n。但我有几百个文件,并希望使用单行。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

使用GNU sed:

    mov     ebx, 0              ; set ebx to zero to start checking at index 0
countloop:
    inc     ebx                 ;Increase ebx for next loop

    cmp     arr[ebx], '\0'      ;compare arr at index [ebx] to end char '\0'
    jne     countloop           ;if not equal, jump back and try for next index 

    mov     arrlength, ebx      ;if equal to '\0', load the value of ebx (actual length of the array) into the empty length variable

输出:

>Org1 
MAVVIIKDAADDSLARRD

>Org2
DSLARRDMAVVIIKDAA

答案 1 :(得分:1)

遵循awk解决方案也可以帮助您。

awk 'NF && />/ && /[0-9]+/{sub(/_[0-9]+/,"");sub(/[0-9]+_/,"")} 1' Input_file

答案 2 :(得分:0)

一个简单的sed脚本:

/^>/!b                 # if it's not a FASTA header line, don't touch it
s/\([>_]\)[0-9]*_/\1/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]*_/\1/g' -e 's/_[0-9]*$//' *.fasta

-i~导致sed执行就地替换,原始文件备份为文件名,并在末尾添加了波浪号。

并非所有sed实施都有多个-e参数,我对[0-9]*略显草率,因为并非所有sed方言都可以说[0-9]+哪个在这里会更合适。如果你有sed -rsed -E这是一个很好的改进但又没有关于你所在平台的信息,我不想发布推测变化。