Ok les gars, je suis vraiment dans une impasse ici, ne sais pas quoi d'autre pour essayer ...Oneliner pour calculer la taille complète de tous les messages dans maillog
Je suis en train d'écrire un script pour un e-mail statistiques, l'une des choses dont il a besoin de faire est de calculer la taille totale de tous les messages du maillog, c'est ce que je l'ai écrit jusqu'à présent:
egrep ' HOSTNAME sendmail\[.*.from=.*., size=' maillog | awk '{print $8}' |
tr "," "+" | tr -cd '[:digit:][=+=]' | sed 's/^/(/;s/+$/)\/1048576/' |
bc -ql | awk -F "." '{print $1}'
Et voici une ligne d'échantillon de mon maillog:
Nov 15 09:08:48 HOSTNAME sendmail[3226]: oAF88gWb003226:
from=<[email protected]>, size=40992, class=0, nrcpts=24,
msgid=<[email protected]>, proto=ESMTP,
daemon=MTA1, relay=[1.1.1.1]
Alors je vais t Premièrement, je passe en revue le fichier pour trouver toutes les lignes contenant la «taille» réelle, ensuite j'imprime le 8e champ, dans ce cas «taille = 40992».
Ensuite, je remplace tous les virgules par un signe plus. Ensuite, je supprime tout sauf les chiffres et le signe plus.
Ensuite, je remplace le début de la ligne par un "(", et je remplace le dernier signe plus avec un ")" suivi de "/ 1048576". Donc, je reçois une énorme expression qui ressemble à ceci:
"(1 + 2 + 3 + 4 + 5 ... + n)/1048576"
Parce que je veux ajouter toutes les tailles de messages individuels et divisez-le donc j'obtiens le résultat en MB.
La dernière commande awk est quand j'obtiens un nombre décimal je ne me soucie vraiment pas de la précision, donc j'imprime simplement la partie avant le point décimal. Le problème est, cela ne fonctionne pas ... Et je pourrais jurer qu'il fonctionnait à un moment donné, pourrait-il être mon expression est trop longue pour que bc manipule?
Merci si vous avez pris le temps de lire :)
Wow, merci beaucoup, c'est une bonne approche et cela fonctionne incroyablement vite! Juste ce que je cherchais :) – f10bit
+1 C'est aussi beaucoup plus rapide. La seule raison pour laquelle je suis allé avec les choses grep/sed/tr/bc ci-dessus était parce que c'était plus proche de la doublure de la question – thkala