Una secuencia de comandos como la siguiente podría ser suficiente.
#!/usr/bin/perl
use PerlIO::gzip;
$filename = 'out';
$limit = 500000;
$fileno = 1;
$line = 0;
while (<>) {
    if (!$fh || $line >= $limit) { 
        open $fh, '>:gzip', "$filename_$fileno"; 
        $fileno++;
        $line = 0; 
    }
    print $fh $_; $line++;
}
 
 Puedes usar el split --filter opción como se explica en el manual, por ejemplo,
zcat biglogfile.gz | split -l500000 --filter='gzip > $FILE.gz'
 
 Editar:no se da cuenta cuando --filter se introdujo la opción pero según los comentarios, no funciona en core utils 8.4 .