我有一个带有两个模式的标题的fasta文件,比如这个
>256_Org1
MAVVIIKDAADDSLARRD
>Org2_10005
DSLARRDMAVVIIKDAA
我想只保留单词并删除数字。我尝试使用awk建议的一个衬垫,但是用分隔符'_'
分隔并跟随{print $1}
分隔256
(错误)或Org2
(右)。我期望的输出是
>Org1
MAVVIIKDAADDSLARRD
>Org2
DSLARRDMAVVIIKDAA
在textwrangler中,我可以分两步替换它, 1 与\>\d+\_
到>
和 2 与\_\d+\n
到\n
。但我有几百个文件,并希望使用单行。有什么建议吗?
答案 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 -r
或sed -E
这是一个很好的改进但又没有关于你所在平台的信息,我不想发布推测变化。