GNU/Linux >> Tutoriales Linux >  >> Linux

7 potentes ejemplos de operadores Awk (operadores Awk unarios, binarios, aritméticos, de cadena, de asignación, condicionales, Reg-Ex)

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.

  1. Operador unario:el operador que acepta un solo operando se denomina operador unario.
  2. 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

Sed y Awk 101 Hacks, por Ramesh Natarajan . Paso varias horas al día en un entorno UNIX/Linux lidiando con archivos de texto (datos, configuración y archivos de registro). Uso Sed y Awk para todo mi trabajo de manipulación de texto. Basado en mi experiencia con Sed y Awk, he escrito el libro electrónico Sed and Awk 101 Hacks que contiene 101 ejemplos prácticos sobre varias funciones avanzadas de Sed y Awk que mejorarán su vida en UNIX/Linux. Incluso si ha estado usando Sed y Awk durante varios años y no ha leído este libro, hágase un favor y lea este libro. Se sorprenderá con las capacidades de las utilidades Sed y Awk.


Linux
  1. Tutorial de programación de Linux C Parte 12 - Operadores de asignación y expresiones condicionales

  2. -eq:¿Se esperaba el operador unario?

  3. 9 potentes funciones incorporadas de Awk para numérico

  4. 6 ejemplos de expresiones condicionales de Bash (-e, -eq, -z, !=, [, [[ ..)

  5. 7 Ejemplos de operadores Linux Grep OR, Grep AND, Grep NOT

Comando AWK en Linux con ejemplos

Tutorial de comandos Linux/UNIX Awk con ejemplos

Comando awk de Linux con 10 ejemplos

Bash Beginner Series #5:Uso de operadores aritméticos en Bash Scripting

Tutorial de expresiones regulares para ejemplos de Linux (Sed y AWK)

Ejemplos de comandos awk en Linux