Este artículo es parte de la serie de ejemplos de tutoriales de Awk en curso. En nuestros artículos anteriores sobre awk, discutimos sobre awk print, variables definidas por el usuario de awk y variables integradas de awk.
Como cualquier otro lenguaje de programación, Awk también tiene muchos operadores para operaciones con números y cadenas. En este artículo, analicemos todos los operadores awk clave .
Hay dos tipos de operadores en Awk.
- Operador unario:el operador que acepta un solo operando se denomina operador unario.
- Operador binario:el operador que acepta más de un operando se denomina operador binario.
Operador unario Awk
Operador | Descripción |
+ | Positivar el número |
– | Niega el número |
++ | Incremento automático |
— | Decremento automático |
Operador binario Awk
Hay diferentes tipos de operadores binarios disponibles en Awk. Se ha clasificado en función de su uso.
Operadores Aritméticos Awk
Los siguientes operadores se utilizan para realizar cálculos aritméticos.
Operador | Descripción |
+ | Adición |
– | Sustracción |
* | Multiplicación |
/ | División |
% | División de módulo |
Operador de cadena Awk
Para la concatenación de cadenas, Awk tiene los siguientes operadores.
Operador | Descripción |
(espacio) | Concatenación de cadenas |
Operadores de asignación Awk
Awk tiene un operador de asignación y un operador de asignación de acceso directo como se indica a continuación.
Operador | Descripción |
= | Tarea |
+= | Asignación de adición de atajos |
-= | Asignación de resta abreviada |
*= | Tarea de multiplicación abreviada |
/= | Asignación de división abreviada |
%= | Asignación de división de módulo abreviado |
Operadores condicionales Awk
Awk tiene la siguiente lista de operadores condicionales que se pueden usar con estructuras de control y declaraciones de bucle que se tratarán en el próximo artículo.
Operador | Descripción |
> | Es mayor que |
>= | Es mayor o igual que |
< | Es menor que |
<= | Es menor o igual que |
<= | Es menor o igual que |
== | Es igual a |
!= | No es igual a |
&& | Ambas expresiones condicionales deben ser verdaderas |
|| | Cualquiera de las expresiones condicionales debe ser verdadera |
Operador de expresión regular Awk
Operador | Descripción |
~ | Operador de coincidencia |
!~ | Operador sin coincidencia |
Ejemplos de operadores Awk
Ahora revisemos algunos ejemplos que usan operadores awk. Usemos /etc/passwd como archivo de entrada en estos ejemplos.
$ cat /etc/passwd gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false saned:x:110:116::/home/saned:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
Awk Ejemplo 1:Cuente el número total de campos en un archivo.
El siguiente script awk coincide con todas las líneas y continúa agregando el número de campos en cada línea, utilizando el operador de asignación de adición de acceso directo. El número de campos vistos hasta el momento se mantiene en una variable llamada 'total'. Una vez que se ha procesado la entrada, se ejecuta el patrón especial 'END {...}', que imprime el número total de campos.
$ awk -F ':' '{ total += NF }; END { print total }' /etc/passwd 49
Ejemplo 2 de Awk:cuente el número de usuarios que usan /bin/sh shell
En el siguiente script awk, coincide con el último campo de todas las líneas que contienen el patrón /bin/sh. La expresión regular debe cerrarse entre //. Entonces, toda la barra frontal (/) debe escaparse en la expresión regular. Cuando una línea coincide con la variable 'n' se incrementa en uno. Impreso el valor de la 'n' en la sección FIN.
$ awk -F ':' '$NF ~ /\/bin\/sh/ { n++ }; END { print n }' /etc/passwd 2
Ejemplo 3 de Awk:encuentre los detalles del usuario que tiene la ID de USUARIO más alta
El siguiente script awk realiza un seguimiento del número más grande en el campo en la variable 'maxuid' y la línea correspondiente se almacenará en la variable 'maxline'. Una vez que ha recorrido todas las líneas, las imprime.
$ awk -F ':' '$3 > maxuid { maxuid=$3; maxline=$0 }; END { print maxuid, maxline }' /etc/passwd 112 gdm:x:112:119:Gnome Display Manager:/var/lib/gdm:/bin/false
Awk Ejemplo 4:Imprime las líneas pares
El siguiente script awk procesa cada línea y verifica NR % 2 ==0, es decir, si NR es múltiplo de 2. Realiza la operación predeterminada que imprime la línea completa.
$ awk 'NR % 2 == 0' /etc/passwd libuuid:x:100:101::/var/lib/libuuid:/bin/sh hplip:x:103:7:HPLIP system user,,,:/var/run/hplip:/bin/false pulse:x:111:117:PulseAudio daemon,,,:/var/run/pulse:/bin/false
Ejemplo 5 de Awk. Imprima todas las líneas que tengan el mismo ID de USUARIO e ID de GRUPO
El siguiente script awk imprime la línea solo si $3 (ID DE USUARIO) y $4 (ID DE GRUPO) son iguales. Comprueba esta condición para cada línea de entrada, si coincide, imprime la línea completa.
$awk -F ':' '$3==$4' passwd.txt gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/bin/sh
Ejemplo 6 de Awk:Imprima los detalles del usuario que tiene un ID de USUARIO mayor o igual a 100 y quién tiene que usar /bin/sh
En la declaración Awk a continuación, hay dos expresiones condicionales, una es la identificación del usuario ($ 3) mayor o igual a 100, y la segunda es el último campo que debe coincidir con /bin/sh, '&&' es para imprimir solo si ambos son los anteriores las condiciones son verdaderas.
$ awk -F ':' '$3>=100 && $NF ~ /\/bin\/sh/' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh
Ejemplo 7 de Awk:Imprima los detalles del usuario que no tiene los comentarios en el archivo /etc/passwd
El siguiente script Awk lee cada línea y verifica que el quinto campo esté vacío, si está vacío, imprime la línea.
$awk -F ':' '$5 == "" ' passwd.txt libuuid:x:100:101::/var/lib/libuuid:/bin/sh syslog:x:101:102::/home/syslog:/bin/false saned:x:110:116::/home/saned:/bin/false
Lecturas recomendadas