O nome do serviço está disponível na coluna cinco no arquivo de log syslog (como encontrado em uma máquina Ubuntu com configuração syslog padrão). Geralmente é listado como servicename[pid]: , por exemplo CRON[1233]: ou ntpd[9283]: etc.
Para obter o quinto campo:
awk '{ print $5 }' /var/log/syslog
Para excluir tudo desse campo, do [ onwards:
awk '{ sub("[[].*", "", $5); print $5 }' /var/log/syslog
Agora você terá uma lista como
dhclient
dhclient
dhclient
CRON
ntpd
CRON
CRON
ntpd
Agora você só precisa classificá-los e contá-los e manter os melhores:
awk '{ sub("[[].*", "", $5); print $5 }' /var/log/syslog |
sort | uniq -c | sort -rn | head -n 5
Isso pode produzir algo como
27 dhclient
23 CRON
13 ntpd
(apenas três serviços nesta máquina em particular).
Para remover os números, filtre por awk '{ print $2 }' .
Você também pode usar tr e cut , mas essas ferramentas são um pouco "simples" demais para esse trabalho IMHO. cut , em particular, precisa saber exatamente quantos caracteres delimitadores serão cortados, portanto, se uma coluna for delimitada por mais de um caractere de espaço, cut precisará levar isso em conta.