Donc, on m'a dit de faire last > lastloggedin
qui crée un fichier qui montre les classes la dernière connexion depuis le dernier redémarrage du système, et maintenant, je suis invité à écrire un script AWK nommé myawk
qui compte/détermine le nombre de lignes de lastloggedin
contient la chaîne CFS264
.
J'ai fait grep -c CFS264 lastloggedin
Pour vous aider, vous pouvez utiliser awk
pour rechercher des lignes dans un fichier contenant une chaîne comme suit:
$ awk '/CFS264/ { .... }' lastloggedin
Les bits dans le { .... }
Seront les commandes requises pour former le nombre de lignes avec cette chaîne. Pour confirmer que ce qui précède fonctionne, vous pouvez utiliser un print $0
Là-bas pour imprimer simplement ces lignes contenant la chaîne de recherche.
$ awk '/CFS264/ { print $0 }' lastloggedin
En ce qui concerne le comptage, si vous recherchez "Compteur AWK", vous devrez trébucher sur cela SO Q & A intitulé: tilisation de l'AWK pour compter le nombre d'enregistrements . La méthode présentée il suffirait de ce que vous décrivez:
$ awk '/CFS264/ {count++} END{print count}' lastloggedin
$ last > lastloggedin
$ awk '/slm/ {count++} END {print count}' lastloggedin
758
$ grep slm lastloggedin | wc -l
758
$ grep -c slm lastloggedin
758
Remarque: Vous ne disez pas quel champ CFS264 concerne la sortie last
. En supposant que c'est un nom d'utilisateur, vous pouvez également restreindre la commande awk
pour rechercher uniquement ce champ, comme si:
$ awk '$1=="CFS264" { print $0 }' lastloggedin
L'exemple suivant compte les temps que je suis mentionné sans avoir besoin du fichier lastloggedin
:
$ last | awk '$1=="yeti" { ++count } END { print count }'
106
Si vous insistez dans l'utilisation ou que vous êtes obligé d'utiliser le fichier lastloggedin
, vous pouvez le faire de cette façon:
$ last > lastloggedin
$ awk '$1=="yeti" { ++count } END { print count }' lastloggedin
106
Utilisation $1~/some_chars/
Pour que tous les noms d'utilisateur contiennent des caractères donnés ou $1~/^prefix/
Pour correspondre uniquement à des noms commençant par prefix
:
$ last | awk '$1~/et/ { ++count } END { print count }'
106
$ last | awk '$1~/^ye/ { ++count } END { print count }'
106
Analyse man awk
Pour plus de notes ... ;-)
awk
est très enrichissant: vous pouvez faire beaucoup de choses après une très courte période d'apprentissage ...
Dernier peut inclure les connexions des utilisateurs à partir de Redémarrages précédents. En tant que tel, les utilisateurs n'empêcheront que les utilisateurs depuis le dernier redémarrage:
last | awk 'NR==1,$1=="reboot"{if ($1 ~ /cfs264/ ) { count+=1; }}END{ print count; }'
La première partie de la commande AWK spécifie une plage - départ de la première ligne jusqu'à ce que la première colonne soit "redémarrer".