J'exécute la commande suivante:
grep -o "[0-9] errors" verification_report_3.txt | awk '{print $1}'
et j'obtiens le résultat suivant:
1
4
0
8
Je voudrais ajouter chacun des nombres à une variable de comptage en cours. Y a-t-il une doublure magique que quelqu'un peut m'aider à construire?
variable=$(grep -o "[0-9] errors" verification_report_3.txt | awk '{ SUM += $1} END { print SUM }')
Cela place la sortie de la commande (qui n'est que la valeur de somme) dans la variable appeléevariable
"[0-9]\+ errors"
. Cela correspondra si vous avez une ligne signalant> 9 erreurs.Cela peut également être fait en awk:
la source
Vous semblez utiliser le système GNU , donc si le support des expressions régulières Perl est disponible, vous pouvez écrire quelque chose comme ceci:
PS J'ai modifié l'expression régulière (ajouté le quantificateur +) pour permettre des nombres> 9.
PS Alternativement, awk est suffisant (en supposant awk GNU ):
la source
Essayez de canaliser la sortie de votre grep vers
la source
J'utilise ceci:
Ce n'est pas efficace pour les grandes listes, mais pour la plupart de mes cas d'utilisation, c'est bien. J'utilise généralement une fonction shell pour automatiser le processus afin que je n'aie qu'à fournir un nom de fichier:
Vous pouvez toujours remplacer le marqueur de fin de ligne par un séparateur d'éléments ou une classe de caractères spécifique si vos données sont délimitées d'une autre manière.
la source