Búsqueda de sitios web

Cómo llamar a un programa externo usando awk


Introducción

Awk es una poderosa herramienta de procesamiento de texto que se puede utilizar para automatizar diversas tareas, como la manipulación, el filtrado y la generación de informes de datos. Una de las características interesantes de awk es su capacidad para llamar programas externos desde el script. En este artículo, exploraremos cómo llamar a un programa externo usando awk.

Comprender la función System()

La función system() se utiliza para ejecutar comandos externos desde awk. La sintaxis de la función system() es la siguiente:

system(command)

El argumento del comando es un comando externo que queremos ejecutar. Cuando se ejecuta la función system(), awk pasa el argumento del comando al shell para su ejecución. Luego, Shell ejecuta el comando y devuelve el estado de salida a awk.

Llamar a un programa externo

Para llamar a un programa externo usando awk, necesitamos especificar el comando que queremos ejecutar como argumento de la función system(). Por ejemplo, digamos que queremos ejecutar el comando de fecha desde un script awk. Podemos hacer esto de la siguiente manera:

{ 
   system("date") 
}

En este ejemplo, llamamos al comando de fecha usando la función system(). Cuando se ejecuta el script, se ejecuta el comando de fecha y la fecha y hora actuales se muestran en la pantalla.

Pasar entrada a un programa externo

Podemos pasar información a un programa externo usando la función system(). Por ejemplo, digamos que queremos ordenar una lista de números usando el comando ordenar. Podemos hacer esto de la siguiente manera:

{ 
   print "3
1
2" | "sort" 
}

En este ejemplo, estamos usando una declaración impresa para generar una lista de números (3, 1, 2). Luego usamos el símbolo de barra vertical (|) para pasar esta lista de números como entrada para ordenar el comando. El comando sort luego ordena los números y devuelve el resultado a awk.

Almacenamiento de la salida de un programa externo

Podemos almacenar la salida de un programa externo en una variable usando la función getline(). La función getline() se utiliza para leer una línea de entrada de un archivo o un comando. Podemos usar la función getline() para capturar la salida de un programa externo. Por ejemplo, digamos que queremos capturar la salida del comando ls en una variable. Podemos hacer esto de la siguiente manera:

{ 
   "ls" | getline output 
   print output 
}

En este ejemplo, estamos usando la función system() para ejecutar el comando ls. Luego estamos usando la función getline() para capturar la salida del comando ls en la variable de salida. Finalmente, estamos usando la declaración print para mostrar el resultado del comando ls.

Pasar argumentos a un programa externo

Podemos pasar argumentos a un programa externo usando la función system(). Por ejemplo, digamos que queremos convertir una cadena a mayúsculas usando el comando tr. Podemos hacer esto de la siguiente manera:

{ 
   str = "hello world" 
   cmd = "echo " str " | tr '[:lower:]' '[:upper:]'" 
   cmd | getline output 
   print output 
}

En este ejemplo, usamos el comando echo para pasar la cadena "hola mundo" como entrada al comando tr. Luego usamos el comando tr para convertir la cadena a mayúsculas. Finalmente, estamos usando la función getline() para capturar la salida del comando tr en la variable de salida.

Manejo de errores

Al llamar a un programa externo usando awk, es importante manejar los errores que pueden ocurrir durante la ejecución. Podemos verificar el estado de salida de un programa externo usando la función system(). El estado de salida es un número que indica el éxito o el fracaso del comando. Un valor de cero indica éxito, mientras que un valor distinto de cero indica fracaso.

Por ejemplo, digamos que queremos verificar si existe un archivo usando el comando de prueba. Podemos hacer esto de la siguiente manera:

{ 
   file = "myfile.txt" 
   cmd = "test -e " file 
   if (system(cmd) != 0) { 
      print "File does not exist" 
   } else { 
      print "File exists" 
   } 
}

En este ejemplo, utilizamos el comando de prueba para comprobar si existe el archivo "myfile.txt". Luego estamos usando la función system() para ejecutar el comando de prueba. Si el estado de salida del comando de prueba no es cero, imprimimos "El archivo no existe". De lo contrario, imprimimos "El archivo existe".

Ejemplos avanzados

  • Filtrado de salida de un programa externo Podemos filtrar la salida de un programa externo usando awk. Por ejemplo, digamos que queremos mostrar solo la primera línea de salida del comando ps. Podemos hacer esto de la siguiente manera:

{ 
   cmd = "ps" 
   cmd | getline output 
   close(cmd) 
   split(output, lines, "
") 
   print lines[1] 
}

En este ejemplo, estamos usando la función getline() para capturar la salida del comando ps en la variable de salida. Luego usamos la función split() para dividir la salida en una matriz de líneas. Finalmente, estamos usando la declaración de impresión para mostrar la primera línea de salida.

  • Usando variables awk en comandos externos Podemos usar variables awk en comandos externos. Por ejemplo, digamos que queremos crear un archivo con un nombre basado en una variable usando el comando táctil. Podemos hacer esto de la siguiente manera:

{ 
   filename = "myfile.txt" 
   cmd = "touch " filename 
   system(cmd) 
}

En este ejemplo, estamos usando la variable de nombre de archivo en el comando táctil para crear un archivo con el nombre "myfile.txt".

  • Usando awk para formatear la salida de un programa externo Podemos usar awk para formatear la salida de un programa externo. Por ejemplo, digamos que queremos mostrar el resultado del comando df en un formato más legible. Podemos hacer esto de la siguiente manera:

{ 
   cmd = "df -h" 
   cmd | getline output 
   close(cmd) 
   printf "%-20s%-10s%-10s%-10s%-10s%s
", "Filesystem", "Size", "Used", "Avail", "Use%", 
   "Mounted on" 
   split(output, lines, "
") 
   for (i=2; i<=length(lines); i++) { 
      printf "%-20s%-10s%-10s%-10s%-10s%s
", $1, $2, $3, $4, $5, $6 
   } 
}

En este ejemplo, estamos usando la declaración printf para formatear la salida del comando df. Estamos imprimiendo una línea de encabezado con encabezados de columna, seguida de la salida del comando df con cada columna alineada con un ancho fijo.

Conclusión

En este artículo, hemos explorado cómo llamar a un programa externo usando awk. Hemos visto cómo pasar entradas a un programa externo, capturar la salida de un programa externo y manejar errores que pueden ocurrir durante la ejecución. Al utilizar la capacidad de awk para llamar a programas externos, podemos automatizar varias tareas y hacer que nuestros scripts sean más potentes y flexibles.