Solución:
Para empezar, puede utilizar awk
para buscar líneas en un archivo que contengan una cadena como esta:
$ awk '/CFS264/ { .... }' lastloggedin
Los bits en el { .... }
serán los comandos necesarios para sumar el número de líneas con esa cadena. Para confirmar que lo anterior está funcionando, puede usar un print $0
allí para simplemente imprimir las líneas que contienen la cadena de búsqueda.
$ awk '/CFS264/ { print $0 }' lastloggedin
En cuanto al conteo, si busca “contador de awk”, se encontrará con este SO Q&A titulado: uso de awk para contar el número de registros. El método que se muestra allí sería suficiente para lo que describe:
$ awk '/CFS264/ {count++} END{print count}' lastloggedin
Ejemplo
$ last > lastloggedin
$ awk '/slm/ {count++} END {print count}' lastloggedin
758
$ grep slm lastloggedin | wc -l
758
$ grep -c slm lastloggedin
758
NOTA: No dice a qué campo pertenece CFS264 en el last
producción. Suponiendo que es un nombre de usuario, entonces podría restringir aún más el awk
comando para buscar solo ese campo así:
$ awk '$1=="CFS264" { print $0 }' lastloggedin
El siguiente ejemplo cuenta las veces que se me menciona sin necesidad de lastloggedin
expediente:
$ last | awk '$1=="yeti" { ++count } END { print count }'
106
Si insiste en usar o se ve obligado a usar el lastloggedin
archivo, puede hacerlo de esta manera:
$ last > lastloggedin
$ awk '$1=="yeti" { ++count } END { print count }' lastloggedin
106
Usar $1~/some_chars/
para obtener todos los nombres de usuario que contienen los caracteres dados o $1~/^prefix/
para hacer coincidir solo los nombres que comienzan con prefix
:
$ last | awk '$1~/et/ { ++count } END { print count }'
106
$ last | awk '$1~/^ye/ { ++count } END { print count }'
106
PD:
Escanear man awk
para más pistas … 😉
awk
es muy gratificante: puedes hacer muchas cosas después de un tiempo muy corto de aprendizaje …
La última lata incluye los inicios de sesión de los usuarios desde reinicios anteriores. Como tal, lo siguiente solo imprimirá a los usuarios desde el último reinicio:
last | awk 'NR==1,$1=="reboot"{if ($1 ~ /cfs264/ ) { count+=1; }}END{ print count; }'
La primera parte del comando awk especifica un rango: comience desde la primera fila hasta que la primera columna sea ‘reiniciar’.