Bash version for Bash

history |
  awk '{print $2}'| 
  awk 'BEGIN {FS="|"} {print $1}' |
  sort | 
  uniq -c |
  sort -rn |
  head -25

Bash version for Zsh

\cat $HOME/.zsh-history |
  perl -pe 's/^: [0-9]+:[0-9]+;\s*//' |
  sort |
  uniq -c |
  sort -n -k1 |
  tail -25 |
  tac

Perl version for Zsh

#!/usr/bin/perl
use strict;

my $history = shift // "$ENV{HOME}/.zsh-history";
my $count   = shift // 25;

open(my $fh, '<', $history) or print STDERR "$!" and exit(1);
chomp(my @records = <$fh>);
close($fh);

my %commands = ();

for(@records) {
  s/^:\s+[0-9]+:[0-9]+;//;
  $commands{$_}++;
}

for(sort { $commands{$b} <=> $commands{$a} } keys(%commands)) {
  if($count == 0) {
    exit(0);
  }
  printf("% 4d => %s\n", $commands{$_}, $_);
  $count--;
}

Example output

 641 => :q
 314 => ls
 107 => scx
  84 => getmail
  83 => colorcoke --random -s 0 -e 15 && showcolors
  82 => p
  73 => clear
  72 => cc256
  72 => su
  56 => u
  54 => d
  53 => dvdc
  50 => t
  49 => perl pwc.pl
  49 => ..
  42 => top20
  37 => perl gitupd.pl /home/scp1/Git
  37 => lxappearance
  35 => pdf
  33 => perl pimpd -sh
  33 => c256
  31 => perl pimpd -cpl
  30 => jekyll --server
  30 => vim pimpd
  29 => perl gitupd.pl /home/scp1/Git/