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