我有像这样的多重快速文件
>aaaaa.1_prot_CAA66754.1_10
MEKLLDAYLSSLRLNRRQVSEQTGLNYTTLQRASDKDALMISPRILWGIAMMVDKTPGQVLDELIELEMK
>bbbbb.1_prot_CAA66753.1_11
MMSKQDRINRRRRNIMKDAHRIAKLIVSNVGDYMVAMKLALKTVYAYKAMRKEVSSRGNAVEMHTLPLLD
GYARQQFEPEFVAGIPAWAIKKDFMSSSAQDILYFTIDTKVVKETEKAVEIEFATKNPKEHGYVDHHHTW
VAKSIMAA
我想像这样重命名标题sed
或awk
>aaaaa.1_10
MEKLLDAYLSSLRLNRRQVSEQTGLNYTTLQRASDKDALMISPRILWGIAMMVDKTPGQVLDELIELEMK
>bbbbb.1_11
MMSKQDRINRRRRNIMKDAHRIAKLIVSNVGDYMVAMKLALKTVYAYKAMRKEVSSRGNAVEMHTLPLLD
GYARQQFEPEFVAGIPAWAIKKDFMSSSAQDILYFTIDTKVVKETEKAVEIEFATKNPKEHGYVDHHHTW
VAKSIMAA
但我只知道sed
一点点,比如
sed 's/.\(.\)$/\1/'
删除每行倒数第二个字母,并保留第一次出现的“-”
答案1
这是一种awk
方法:
$ awk '/^>/{sub(/\.[^.]+/,"")}1' file
>aaaaa.1_10
MEKLLDAYLSSLRLNRRQVSEQTGLNYTTLQRASDKDALMISPRILWGIAMMVDKTPGQVLDELIELEMK
>bbbbb.1_11
MMSKQDRINRRRRNIMKDAHRIAKLIVSNVGDYMVAMKLALKTVYAYKAMRKEVSSRGNAVEMHTLPLLD
GYARQQFEPEFVAGIPAWAIKKDFMSSSAQDILYFTIDTKVVKETEKAVEIEFATKNPKEHGYVDHHHTW
VAKSIMAA
这将考虑修改以 a 开头的行>
(标题行)。
在这些行中,它将替换模式“以字符开头.
并由字符组成的字符串”不是包括.
“(表示从第一个字符开始.
,直到并排除下一个字符的字符序列.
)和“nothing”,从而将其删除。
看似偏离1
规则块的内容指示awk
打印当前行,包括迄今为止所做的所有可能的修改。
答案2
$ sed 's/_.*_/_/' file
>aaaaa.1_10
MEKLLDAYLSSLRLNRRQVSEQTGLNYTTLQRASDKDALMISPRILWGIAMMVDKTPGQVLDELIELEMK
>bbbbb.1_11
MMSKQDRINRRRRNIMKDAHRIAKLIVSNVGDYMVAMKLALKTVYAYKAMRKEVSSRGNAVEMHTLPLLD
GYARQQFEPEFVAGIPAWAIKKDFMSSSAQDILYFTIDTKVVKETEKAVEIEFATKNPKEHGYVDHHHTW
VAKSIMAA
答案3
假设您要删除标题中从第一个点到第二个点的部分,以下命令将删除从第一个点到第二个点的所有内容,但不包括第二个点:
sed 's/\.[^.]*//' file
或者,删除从第一个点之后到第二个点(包括第二个点)的所有内容:
sed 's/[^.]*\.//2' file
我相信您尝试执行的操作如下,它捕获从最后一个点到末尾的位,然后用捕获的字符串替换第一个点中的整个字符串:
sed 's/\..*\(\..*\)/\1/' file
使用awk
并将每行视为一组点分隔的字段,删除每行上以 开头的第二个此类字段>
:
awk -F . 'BEGIN { OFS=FS } /^>/ { $0 = $1 OFS $3 }; 1' file
答案4
awk -F "_" '/^>/{$0=$1"_"$NF}1' file
输出
>aaaaa.1_10
MEKLLDAYLSSLRLNRRQVSEQTGLNYTTLQRASDKDALMISPRILWGIAMMVDKTPGQVLDELIELEMK
>bbbbb.1_11
MMSKQDRINRRRRNIMKDAHRIAKLIVSNVGDYMVAMKLALKTVYAYKAMRKEVSSRGNAVEMHTLPLLD
GYARQQFEPEFVAGIPAWAIKKDFMSSSAQDILYFTIDTKVVKETEKAVEIEFATKNPKEHGYVDHHHTW
VAKSIMAA