Comment grep nombre d'événements uniques
Je comprends que grep -c string
peut être utilisé pour compter les occurrences d'une chaîne donnée. Ce que je voudrais faire est de compter le nombre d'événements uniques, quand seulement une partie de la chaîne est connue ou reste constante.
Par Exemple, si j'avais un fichier (dans ce cas, un journal) avec plusieurs lignes contenant une chaîne constante et la répétition d'une variable comme ceci:
string=value1
string=value1
string=value1
string=value2
string=value3
string=value2
Que je voudrais être en mesure d'identifier le nombre de chaque ensemble unique avec une sortie semblable au suivant: (idéalement avec un simple grep/awk string)
value1 = 3 occurrences
value2 = 2 occurrences
value3 = 1 occurrences
Quelqu'un aurait-il une solution à l'aide de grep ou awk qui pourrait fonctionner? Merci à l'avance!
I understand that grep -c string can be used to count the occurrences of a given string.
ce n'est pas vrai. il compte le nombre de lignes correspondants. par exemple, vous grep -c foo <<< "foo foo foo"
sera de retour 1
J'ai pensé à essayer quelque chose comme
grep -c wwn=* <fileName>
mais je ne suis pas sûr de la façon d'obtenir le nombre de pièces pour chaque unique occurrence de "www=" et/ou de la chaîne elle-même.Bien, merci!
OriginalL'auteur Simpleton | 2013-09-11
Vous devez vous connecter pour publier un commentaire.
Cela a fonctionné parfaitement... Merci à tous pour vos commentaires!
grep -oP "wwn=[^,]*" path/to/file | sort | uniq -c
uniq
n'a pas l'air de fonctionner correctement, j'ai eu toutes les occurences de toute façon. Quelqu'un d'autre-il un avis?Le
sort
commande prend une liste d'éléments et les trie par ordre alphabétique et numérique. Leuniq
commande prend une liste d'éléments et supprime adjacentes des lignes dupliquées. Le mot clé étant "à côté" des doublons.. trier la sortie s'assure d'abord dupliquer les chaînes sont adjacents les uns aux autres pour le traitement par leuniq
de commande.OriginalL'auteur Simpleton
En général, si vous voulez grep et aussi garder une trace des résultats, il est préférable d'utiliser
awk
puisqu'il effectue de telles choses de manière claire, avec une très syntaxe simple.Donc, pour votre fichier donné, je voudrais utiliser:
Qu'est-ce que cela fait?
-F=
définissez le séparateur de champ pour
=
, de sorte que nous pouvons calculer la droite et à la gauche de ce./string=/{count[$2]++}
lorsque le motif "chaîne=" est trouvé, le vérifier! Il utilise un tableau
count[]
pour garder une trace du temps le deuxième champ est apparu jusqu'à présent.END {for (i in count) print i, count[i]}
à la fin, en boucle par les résultats et de les imprimer.
OriginalL'auteur fedorqui
Voici un script awk:
Exemple:
De sortie:
OriginalL'auteur konsolebox