Не могли бы вы попробовать следующее.
awk '
/^>/{
if(val){
print val}
val=""
}
{
val=(val?val "##":"")$0
}
END{
if(val){
print val
}
}' Input_file | sort -k2.4 | tr -s '##' '\n'
Объяснение: Учитывая, что ваш Input_file не содержит ##
, иначе вы можете изменитьих к любой другой строке.По сути, я добавляю строки, начиная с >
до последней строки, которые идут до следующего появления >
, где я добавляю их в одну строку с помощью разделителя ##
(вы могли бы изменить его, о котором я уже упоминал), затем сортируюих со 2-м полем, наконец, удалив ##
с помощью команды tr
для новой строки снова.
Вывод будет следующим (после запуска для предоставленных образцов):
>Mdm2 OS=Felis catus OX=9685 GN=MDM2 PE=4 SV=2
MSRGFRRAPLGQQGARIGRASAGSGPPGACAGPVWLERKWSKSPSLRGSPNPSDRSPAGF
AARSL
>Mdm2 OS=Homo sapiens OX=9545 GN=MDM2 PE=3 SV=1
SSDSGTSVSENRCHLEGGSDQKDLVQELQEEKPSSSHLVSRPSTSSRRRAISETEENSDE
>Mdm2 OS=Macaca nemestrina OX=9545 GN=MDM2 PE=3 SV=1
MVRSRQMCNTNMSVPTDGAVTTSQIPASEQETLVRPKPLLLKLLKSVGAQKDTYTMKEVL
FYLGQYIMTKRLYDEKQQHIVYCSNDLLGDLFGVPSFSVKEHRKIYTMIYRNLVVVNQQE