#!/usr/bin/perl
use strict; # https://perlmonks.org/?node_id=11144847
use warnings;
my %res;
/(id\d+)(.*)/s and push @{ $res{$2} }, $1 for split />/, join '', <DAT
+A>;
for ( sort keys %res )
{
local $" = '|';
print ">@{$res{$_}}$_";
}
__DATA__
>id1|Q51487|P-474-4|86-98,113-126,297-310,322-335
CSLIPDYQRPEAPVAAAYPQGQAYGQNTGAAAVPAADIGWREFFRDPQLQQLIGVALE
>id2|Q51487|P-474-4|86-98,113-126,297-310,322-335
CSLIPDYQRPEAPVAAAYPQGQAYGQNTGAAAVPAADIGWREFFRDPQLQQLIGVALE
>id3|Q51487|P-474-4|86-98,113-126,297-310,322-335
CSLIPDYQRPEAPVAAAYPQGQAYGQNTGAAAVPAADIGWREFFRDPQLQQLIGVALE
>id4|Q51487|P-474-4|86-98,113-126,297-310,322-335 alt
CSLIPDYQRPEAPVAAAYPQGQAYGQNTGAAAVPAADIGWREFFRDPQLQQLIGVALE
>id5|Q51487|P-474-4|86-98,113-126,297-310,322-335 alt
CSLIPDYQRPEAPVAAAYPQGQAYGQNTGAAAVPAADIGWREFFRDPQLQQLIGVALE
Outputs:
>id1|id2|id3|Q51487|P-474-4|86-98,113-126,297-310,322-335
CSLIPDYQRPEAPVAAAYPQGQAYGQNTGAAAVPAADIGWREFFRDPQLQQLIGVALE
>id4|id5|Q51487|P-474-4|86-98,113-126,297-310,322-335 alt
CSLIPDYQRPEAPVAAAYPQGQAYGQNTGAAAVPAADIGWREFFRDPQLQQLIGVALEc>