AWK – Otros ejemplos de utilidad.-

Para contar las veces que aparece un determinado patrón, en este ejemplo contamos la veces que aparece el string "Invalid user" en /var/log/secure:
awk '/Invalid user/ { count+=1 } END { print count }' /var/log/secure

Imprimir con AWK un determinado rango de columnas, en este caso se procesa un log de Apache para imprimir únicamente el contenido entre la primera y quinta columna:
cat /var/log/apache2/woop.es-access.log | awk '{ for (x=1; x<=5; x++) {  printf "%s ", $x } printf "\n" }'

Para sumar el tamaño total ocupado por los ficheros de un directorio:
ls -l /var/log/httpd | awk '{ sum += $5 } END { print sum }'

Podemos hacer mas flexible la suma de columnas en AWK - añadiendo una condición, en este ejemplo limitamos la suma del tamaño de los ficheros a aquellos en los que el usuario "apache" sea el propietario del mismo:
ls -l /var/log/httpd | awk ' $3 == "apache" { sum += $5 } END { print sum }'

Listar los usuarios con USERID mayor o igual a 1000 que son aquellas personas físicas que agregamos en el sistema
awk -F":" '{ if ($3 >= 1000) { print $1 ": " $5}  }' /etc/passwd
awk -F":" '{ if ($3 >= 1000) { print $1 ": " $5} }' /etc/passwd | sort -d | nl | less

Pero, lo que es realmente maravilloso en este caso es que podemos acceder al valor del campo que se encuentra en el último lugar con tan solo $NF en lugar de NF: 
awk '{ print NF, “:”, $NF }' alumnos.txt 

También podemos acceder al penúltimo campo empleando una expresión aritmética: 
awk '{ print $(NF - 1) }' alumnos.txt

Combinando ambos, es fácil obtener el penúltimo y ultimo campo de cada línea.
awk '{ print $(NF - 1), $NF }' alumnos.txt
Esta entrada fue publicada en Unix - Linux. Guarda el enlace permanente.