Búsqueda de sitios web

Usando declaraciones If Else en Awk


Aprenda a utilizar declaraciones condicionales en AWK. Con el uso de if else, puedes escribir scripts AWK avanzados.

AWK es un poderoso lenguaje de secuencias de comandos que viene integrado en el shell bash.

Es extremadamente versátil y se puede utilizar para escribir todo tipo de scripts de extracción de datos.

Las declaraciones condicionales son una parte integral de cualquier lenguaje de programación o scripting y AWK no es diferente.

En este tutorial, mostraré ejemplos del uso de declaraciones if-else en AWK. Aquí están los datos de muestra en los que baso mis ejemplos.

ID Name Age Subject
111 Farhaan 18 DevOps
89 Alex 21 SecOps
92 Ronn 22 IT
100 Robert 23 Commerce
102 Samantha 20 Cloud-Admin
105 Bob 21 Maths

Lo guardo en students.txt. Puedes descargarlo si quieres probar los ejemplos por tu cuenta.

1. La declaración if en Awk

Una declaración if verifica si la condición es verdadera o falsa. Si la condición es verdadera, ejecuta las declaraciones.

Aquí hay una sintaxis simple para la declaración if en awk:

awk '{if (condition) {statement} }' [input_file]

Ahora, usemos nuestros datos de muestra del archivo Students.txt e imprimamos los detalles del estudiante con ID 100 usando la condición if en AWK.

awk '{                                        

if ($1=="100")

  {
    print "............... \n";
    print "Name : " ,$2;
    print "Age : ",$3;
    print "Department : " ,$4;
  }
  
}' students.txt

Aquí está la ejecución del comando awk anterior:

El comando anterior completo también se puede escribir en una sola oración como esta:

awk '{ if ($1=="100")  { print "............... \n"; print "Name : " ,$2; print "Age : ",$3; print "Department : " ,$4; } }' students.txt

Pero el primero es más fácil de leer y entender.

2. La declaración if else en Awk

En el ejemplo anterior, sólo había una condición y una acción. La declaración if else es ligeramente diferente de la declaración if.

El formato general para la declaración if else en awk es:

awk '{
  if (condition) 
    {command1} 
  else 
    {command2}
}' [input_file]

Aquí, si la condición es verdadera, se ejecutará el comando1, y si la condición es falsa, se ejecutará el comando2 de la parte else.

Tomemos nuevamente el archivo de datos student.txt.

Suponga que desea obtener el nombre de todos los estudiantes y su departamento cuya edad es menor o igual a 20 años.

El comando AWK podría ser así:

awk '{

if ($3<20)
  {
    print "Student "$2,"of department", $4, "is less than 20 years old"
  } 
else
  {
    print "Student "$2,"of department", $4, "is more than 20 years old"
  }

Aquí está la ejecución y el resultado del ejemplo if else:

Como puedes ver, sólo hay dos estudiantes menores de 20 años. El resto de alumnos tienen más de 20 años.

Pero hay un problema en el ejemplo anterior. También considera la descripción de la tabla como dato real y nos dice que Nombre del estudiante Edad Edad tiene más de 20 años.

Rectifiquemos esto con una declaración if else-if.

3. La declaración if else-if en Awk

Con las declaraciones if else if, el comando awk verifica múltiples condiciones.

Si la primera condición es falsa, comprueba la segunda condición. Si la segunda condición también es falsa, comprueba la tercera condición y así sucesivamente. Comprueba todas las condiciones hasta que una de ellas sea verdadera. Si no se cumple ninguna condición, se ejecuta la parte else.

if(condition1){

command1

}

else if(condition2) {

command2

}

else if(condition3) {

command3

}

.

.

.

else{

commandN

}

En el ejemplo anterior, el resultado también consideró la primera línea de datos, que es solo la descripción.

Pongamos una condición para comprobar si la edad es un número o no. Estoy usando una expresión regular /[0-9]+$/ que significa valores numéricos. El ~ significa que el argumento tiene un número. Y el operador de negación que tienen delante significa que el campo no debe tener un número.

awk '{

if (! ($3 ~ /[0-9]+$/))
  {
    print "Age is just a number but you do not have a number"
  } 
else if ($3<20)
  {
    print "Student "$2,"of department", $4, "is less than 20 years old"
  } 
else
  {
    print "Student "$2,"of department", $4, "is more than 20 years old"
  }

}' students.txt

Ejecutémoslo y centrémonos en la primera línea del resultado.

Consejo adicional: utilice el archivo de programa awk

Si le resulta directamente problemático escribir programas largos awk en la terminal, utilice archivos awk.

Crea un nuevo archivo y llámalo ejemplo.awk o como quieras. La extensión no importa aquí. Simplemente hace que sea fácil entender que el archivo es un archivo de programa awk.

Colocas el contenido entre '' que viene justo después de awk en los ejemplos anteriores.

{
if (! ($3 ~ /[0-9]+$/))
  {
    print "Age is just a number but you do not have a number"
  } 
else if ($3<20)
  {
    print "Student "$2,"of department", $4, "is less than 20 years old"
  } 
else
  {
    print "Student "$2,"of department", $4, "is more than 20 years old"
  }
  
}

Ahora, use este archivo awk de la siguiente manera:

awk -f example.awk students.txt

Producirá el mismo resultado que vio anteriormente.

Más consejo adicional: utilice el operador ternario en su lugar

En lugar de usar declaraciones if else en awk, también puedes usar el operador ternario. Las expresiones ternarias son la versión abreviada de la declaración if-else del Awk.

Si la condición es verdadera, se ejecutará el comando1; de lo contrario, si la condición es falsa, se ejecuta el comando2.

(condition) ? Command1:Command2

Considere el siguiente ejemplo del comando awk:

awk '{print ($3 <=20)? "Age less than 20: " $2: "Age over 20: " $2}' students.txt

En este ejemplo, $3 se refiere al campo Edad. Si la edad es menor o igual a 20 años, imprimirá el primer comando que muestra "La edad es menor de 20 años". Si la primera parte es Falsa, ejecutará el segundo comando, "La edad es mayor de 20 años".

abhishek@LHB:~$ awk '{print ($3 <=20)? "Age less than 20: " $2: "Age over 20: " $2}' students.txt
Age over 20: Name
Age less than 20: Farhaan
Age over 20: Alex
Age over 20: Ronn
Age over 20: Robert
Age less than 20: Samantha
Age over 20: Bob

Conclusión

En esta guía, aprendió diferentes formas de usar declaraciones if-else en el lenguaje de programación AWK. Con estas declaraciones, puede controlar el flujo de un programa, evaluar una condición, extraer datos de un archivo, etc.

Si necesita algunos ejemplos más, este artículo le ayudará.