AWK - Funciones varias

AWK tiene las siguientes funciones diversas:

cerrar (expr)

Esta función cierra el archivo de la tubería.

Ejemplo

[jerry]$ awk 'BEGIN {
   cmd = "tr [a-z] [A-Z]"
   print "hello, world !!!" |& cmd
   
   close(cmd, "to")
   cmd |& getline out
   print out;
   
   close(cmd);
}'

Al ejecutar este código, obtiene el siguiente resultado:

Salida

HELLO, WORLD !!!

¿El guión parece críptico? Vamos a desmitificarlo.

  • La primera declaración, cmd = "tr [a-z] [A-Z]" - es el comando al que establecemos la comunicación bidireccional desde AWK.

  • La siguiente declaración, es decir, la printcomando, proporciona entrada al comando tr. aquí&| indica comunicación bidireccional.

  • La tercera declaración, es decir, close(cmd, "to"), cierra el to proceso después de competir su ejecución.

  • La siguiente declaración cmd |& getline out almacena la salida en out variable con la ayuda de la función getline.

  • La siguiente declaración de impresión imprime la salida y finalmente la función de cierre cierra el comando.

Eliminar

Esta función elimina un elemento de una matriz. El siguiente ejemplo muestra el uso de ladelete función -

Ejemplo

[jerry]$ awk 'BEGIN {
   arr[0] = "One"
   arr[1] = "Two"
   arr[2] = "Three"
   arr[3] = "Four"
   print "Array elements before delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
   delete arr[0]
   delete arr[1]
   print "Array elements after delete operation:"
   
   for (i in arr) {
      print arr[i]
   }
}'

Al ejecutar este código, obtiene el siguiente resultado:

Salida

Array elements before delete operation:
One
Two
Three
Four

Array elements after delete operation:
Three
Four

salida

Esta función detiene la ejecución de un script. También acepta un opcionalexprque se convierte en el valor de retorno de AWK. El siguiente ejemplo describe el uso de la función de salida.

Ejemplo

[jerry]$ awk 'BEGIN {
   print "Hello, World !!!"
   exit 10
   print "AWK never executes this statement."
}'

Al ejecutar este código, obtiene el siguiente resultado:

Salida

Hello, World !!!

enjuagar

Esta función vacía los búferes asociados con el archivo de salida o canalización abiertos. La siguiente sintaxis demuestra la función.

Sintaxis

fflush([output-expr])

Si no se proporciona output-expr, elimina la salida estándar. Si output-expr es la cadena nula (""), limpia todos los archivos y conductos abiertos.

obtener línea

Esta función le indica a AWK que lea la siguiente línea. El siguiente ejemplo lee y muestra elmarks.txt archivo usando la función getline.

Ejemplo

[jerry]$ awk '{getline; print $0}' marks.txt

Al ejecutar este código, obtiene el siguiente resultado:

Salida

2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

El guión funciona bien. Pero, ¿dónde está la primera línea? Averigüemos.

Al principio, AWK lee la primera línea del archivo marks.txt y lo almacena en $0 variable.

Y finalmente, AWK's printdeclaración imprime la segunda línea. Este proceso continúa hasta el final del archivo.

siguiente

los nextLa función cambia el flujo del programa. Hace que se detenga el procesamiento actual del espacio de patrones. El programa lee la siguiente línea y comienza a ejecutar los comandos nuevamente con la nueva línea. Por ejemplo, el siguiente programa no realiza ningún procesamiento cuando una coincidencia de patrones tiene éxito.

Ejemplo

[jerry]$ awk '{if ($0 ~/Shyam/) next; print $0}' marks.txt

Al ejecutar este código, obtiene el siguiente resultado:

Salida

1) Amit    Physics   80
2) Rahul   Maths     90
4) Kedar   English   85
5) Hari    History   89

nextfile

los nextfileLa función cambia el flujo del programa. Detiene el procesamiento del archivo de entrada actual e inicia un nuevo ciclo a través de declaraciones de patrones / procedimientos, comenzando con el primer registro del siguiente archivo. Por ejemplo, el siguiente ejemplo deja de procesar el primer archivo cuando una coincidencia de patrón tiene éxito.

Primero cree dos archivos. Déjanos decirfile1.txt contiene -

file1:str1
file1:str2
file1:str3
file1:str4

Y file2.txt contiene -

file2:str1
file2:str2
file2:str3
file2:str4

Ahora usemos la función nextfile.

Ejemplo

[jerry]$ awk '{ if ($0 ~ /file1:str2/) nextfile; print $0 }' file1.txt file2.txt

Salida

Al ejecutar este código, obtiene el siguiente resultado:

file1:str1
file2:str1
file2:str2
file2:str3
file2:str4

regreso

Esta función se puede utilizar dentro de una función definida por el usuario para devolver el valor. Tenga en cuenta que el valor de retorno de una función no está definido si no se proporciona expr. El siguiente ejemplo describe el uso de la función de devolución.

Primero, crea un functions.awk archivo que contiene el comando AWK como se muestra a continuación -

Ejemplo

function addition(num1, num2) {
   result = num1 + num2
   return result
}
BEGIN {
   res = addition(10, 20)
   print "10 + 20 = " res
}

Al ejecutar este código, obtiene el siguiente resultado:

Salida

10 + 20 = 30

sistema

Esta función ejecuta el comando especificado y devuelve su estado de salida. Un estado de retorno 0 indica que la ejecución de un comando se ha realizado correctamente. Un valor distinto de cero indica una falla en la ejecución del comando. Por ejemplo, el siguiente ejemplo muestra la fecha actual y también muestra el estado de retorno del comando.

Ejemplo

[jerry]$ awk 'BEGIN { ret = system("date"); print "Return value = " ret }'

Al ejecutar este código, obtiene el siguiente resultado:

Salida

Sun Dec 21 23:16:07 IST 2014
Return value = 0