Saltar al contenido

Cuente los registros que coinciden con el patrón con Awk

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’.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *