Je veux que la bash passe par un fichier journal des erreurs apache2 et la liste de toutes ses lignes (similaire à cat
), mais de manière à compter combien de fois chaque ligne est contenue dans le fichier et à ne répertorier que les lignes DISTINCT avec un nombre total de lignes.
Ainsi, par exemple, si le journal des erreurs ressemble à ceci:
Error 1: file failed
Error 2: client failed
Error 3: server failed
Error 1: file failed
J'aimerais avoir cet écho:
[2] Error 1: file failed
[1] Error 2: client failed
[1] Error 3: server failed
Réponses:
Utilisation
sort
etuniq
:Si vous souhaitez que la sortie soit triée en fonction du nombre d'occurrences, ajoutez
| sort -n
à la fin.la source
Utilisation de awk:
Comptez le no. d'occurrences dans un tableau a. Sur l’étiquette FIN, imprimez tous les éléments de a.
la source
Pour que l'un des exemples cités soit vraiment significatif, vous devez supprimer les dates de chaque ligne. En supposant qu'une ligne dans votre journal ressemble à ceci:
alors vous pourriez faire quelque chose comme:
Cela produira une sortie similaire à:
la source