Vérifier si un champ est un entier de awk
J'utilise le script suivant pour trouver le numéro de l'exécution de connexions sur mon mongodb-serveur.
mongostat | awk 'BEGIN{FS=" *"}{print "Number of connections: "$19}'
Mais toutes les 10 lignes, $19 comporte une chaîne de caractères, ce qui dénote un nom de champ.
Je veux modifier mon script pour imprimer uniquement si $19
est un entier.
Je pourrais essayer FS = " *[^0-9]*"
, mais elle correspond à des colonnes qui commencent par le nombre, plutôt que de donner impression sélective.
Et le huitième jour, dieu inventa le perl.
OriginalL'auteur Cheeku | 2015-03-05
Vous devez vous connecter pour publier un commentaire.
Utilisation
$19 ~ /^[0-9]+$/
vérifie si$19
correspond à l'expression rationnelle^[0-9]+$
(c'est à dire, si il n'est composé que de chiffres), et l'action associée est exécutée seulement si c'est le cas.Par la voie, venez pour penser à elle, le séparateur de champ est probablement inutile. Le séparateur de champ par défaut de
awk
est une séquence d'espaces, de sorte que simongostat
utilise un mélange de tabulations et des espaces,devrait fonctionner correctement.
La deuxième chose que vous avez donné, si le séparateur de champ, ne fonctionne pas pour une raison quelconque. Reste tout est génial. La paix yo!
C'est bizarre, mais depuis que j'aurais du installer MongoDB pour le vérifier, je vais la craie vers le haut comme un mystère. Si il y a un errant onglet entre les espaces dans la sortie, qui serait analysée comme un champ de
-F ' *'
mais pas avec la valeur par défautFS
, et c'est probablement quelque chose le long de ces lignes qui se passe.OriginalL'auteur Wintermute
Vérifier si ce champ est formé par juste des chiffres en faisant correspondre le regex
^[0-9]+$
:^
est synonyme de début de chaîne et$
pour la fin, donc nous allons vérifier si il se composent en chiffres depuis le début jusqu'à la fin. Avec+
nous le faire correspondre au moins un chiffre, sinon un champ vide serait également correspondre (donc un fichier avec moins de champs de toujours correspondre).Tous ensemble:
Bon à savoir! Notez également que vous pouvez utiliser Wintermute suggestions (j'étais sur le point de les commenter, mais ne voulez pas avoir des verbatim des solutions)
La regex explication est inutile. 😛 j'ai juste besoin awk aider. Mais, de grâce, de toute façon.
OK, remarque aussi, vous voudrez peut-être dire
print "Number of connections:", $19
. Qui est, que awk lui-même l'impression de l'espace.OriginalL'auteur fedorqui