Funciones en awk usando tutoriales

  
 Dado que awk es un lenguaje de scripting, no hay definiciones de tipos de datos complejos en lenguajes de alto nivel. Al definir variables en awk, cada variable tiene un valor de tipo de cadena y un valor de tipo numérico. Por lo tanto, las funciones involucradas en awk no son más que operaciones aritméticas, procesamiento de cadenas y funciones definidas por el usuario. El siguiente artículo se ampliará de acuerdo con las siguientes tres partes:
  • Funciones aritméticas
  • Funciones de cadena
  • Funciones personalizadas

    Inicio del viaje .
    Funciones aritméticas
    Las funciones aritméticas básicamente aceptan parámetros numéricos y devuelven tipos numéricos. Las funciones aritméticas utilizadas comúnmente son las siguientes:

    Nombre de la función
    Descripción
    < Th> Ejemplos
    int (x) Redondea el decimal hacia abajo awk ‘ {print int (4.5), int (4.1), int (4.6)} ’, salida: 4 4 4 rand (x) atrás un número aleatorio r, en la que 0 < = r < 1 awk y lsquo; {rand print (), rand (), rand ()} ’, salida: 0,237788 0,291066 0,845814 srand (x) genera rand) nuevo número de semillas (, Si no se especifica un número de semilla, se usa la hora del día. Esta función devuelve el valor inicial anterior. Consulte el siguiente resumen detallado.
    Entre las tres funciones anteriores, el número aleatorio es el que más utilizamos. Hablemos de las funciones rand y srand en detalle.
    Hay un script awk de este tipo:
    BEGIN {print rand (); print rand (); srand (); print rand (); print rand ();} Guardamos este script como rand.awk.
    awk -f rand.awk correr primera salida tras los resultados:
    0.2377880.2910660.01182260.115346 segunda salida de la carrera de los siguientes resultados:
    0.2377880.2910660.7794110.897179 se encuentra que las dos primeras carreras Los valores aleatorios de las dos salidas son los mismos, que es donde debe prestar atención al uso de estas dos funciones. Si no se llama a la función srand, awk llama a srand con una constante como parámetro antes de iniciar el programa, similar a srand (2), lo que hace que el programa se inicie desde el mismo número de semilla cada vez que se ejecuta, dando como resultado Se emite el mismo número aleatorio. Si queremos generar un número aleatorio diferente cada vez que ejecutamos el script, la mejor manera es llamar a la función srand en la sección BEGIN.
    funciones de cadena
    En cualquier lenguaje, el procesamiento de cadenas es muy importante, awk no es una excepción, ahora mire las funciones de cadena en awk:

    Nombre de la función
    Descripción
    gsub (r, s, t) Reemplaza todas las cadenas que coinciden con la expresión regular r con la cadena s en la cadena t. Devuelve el número de reemplazos. Si no se proporciona t, el índice predeterminado de $ 0 (s, t) devuelve la posición de la subcadena t en la longitud de la cadena s devuelve la longitud de la cadena s, cuando no se proporciona s, devuelve la longitud de $ 0 coincidencias (s , r) si la expresión regular r aparece en s, devuelve la posición inicial de la ocurrencia; si r no aparece en s, devuelve 0 división (s, a, sep) Descompone la cadena s utilizando el separador de campo sep Devuelve el número de elementos en el elemento de la matriz a. Si no se da sep, se usa FS. La misma forma se usa para la separación de matrices y la separación de campos. Sprintf Formatea la salida sub (r, s, t) Reemplaza la primera coincidencia de la expresión regular r con s en la cadena t. Devuelve 1 si tiene éxito, de lo contrario devuelve 0. Si no se da t, el valor predeterminado es $ 0. substr (s, p, n) devuelve la subcadena de la cadena s comenzando desde la posición p con una longitud máxima de n. Si no se proporciona n, devuelva la cadena restante de p tolower (s) para convertir todos los caracteres en mayúscula en string s a minúsculas y devuelva una nueva cadena, la cadena original no se cambiará para que el (los) máximo (s) sea el carácter Todos los caracteres en minúscula de la cadena s se convierten a mayúsculas y se devuelve una nueva cadena. La cadena original no se modifica.
    En awk: gsub y sub se proporcionan dos funciones de sustitución de cadenas. La diferencia entre los dos es que gsub es un reemplazo global, y sub solo reemplaza el contenido de la primera coincidencia.
    datos de prueba: Jalea: 26: 12474125874: 04713365412: 0081245: Jalea {# coincidirá con cada fila " Jelly " llena cadena con " JellyThink " si (gsub (/Jalea /" JellyThink " )) de molde # salida: JellyThink: 26: 12474125874: 04713365412: 0081245: JellyThink # el primer partido " JellyThink " cadena de caracteres se sustituye " Jelly " si (sub (/JellyThink /" Jelly ")) impresión # salida: jalea: 26: 12474125874: 04713365412: 0081245: jellyThink # convierte todos los caracteres en mayúsculas a minúsculas imprimir tolower ($ 0) # de salida: jalea: 26: 12474125874: 04713365412: 0081245: jellythink # todos los caracteres en minúsculas convierte a mayúsculas toupper de impresión ($ 0) # de salida: Jalea: 26: 12474125874: 04713365412: 0081245: JELLYTHINK # devuelve " T " posición de carácter, sólo puede devolver caracteres índice de posición de impresión ($ 0, " T ") # la $ 0 divididos Y calcule la longitud de cada campo, la salida es la siguiente: # [1] = Jalea, Longitud: 5 # [2] = 26 , Longitud: 2 # [3] = 12474125874, longitud: 11 # [4] = 04713365412, longitud: 11 # [5] = 0.081.245, longitud: 7 # [6] = JellyThink, longitud: 10 n = split ($ 0, campo, ": ") para (i = 1; i < = n; ++ i) {value = sprintf (" [% d] =% - 12s, longitud:% d ", i, campo [i ], longitud (campo [i])); valor de impresión} if (ubicación = coincidencia ($ 0, registro)) {printf (" coincidente con% s \\ n ", ubicación, registro en% d)} else {printf (" Lo sentimos, no coincide con% s \\ n ", reg)}} Función personalizada
    Permitir que la gente haga bricolaje, siempre es emocionante. En awk, también podemos personalizar el nuestro. La función, definida en awk, se escribe de la siguiente manera:
    nombre de la función (lista de parámetros) {sentencias} donde lista de parámetros es una lista de argumentos separados por comas que se pasan como argumentos a la función cuando se llama a la función. . A continuación, use un ejemplo simple para ilustrar el uso de funciones personalizadas:
    Datos de prueba: HelloWorld # Definir función función insert (string, pos, ins) {before = substr (string, 1, pos) after = substr (string , pos + 1) de devolución antes de entrada después de} cuerpo # script {inserto de impresión ($ 0, 5, " JellyThink ") de impresión antes # de salida: Hola imprimir después de las salidas #: mundo de la impresión $ 0 # salida: HelloWorld} porción de cuerpo guión Cuando imprimimos los valores de antes y después, encontramos que se puede generar. Hay un punto a tener en cuenta aquí.

    Awk, las variables definidas en la función, el valor predeterminado es global, y los parámetros pasados ​​son pases de valores, es decir, incluso si el valor del parámetro pasado se modifica dentro de la función, fuera de la función, El valor del parámetro no se cambia. Esto es un poco como Lua.
    Mire de esta manera:
    Datos de prueba: HelloWorld # Definir función función insertar (cadena, pos, ins, antes, después) {antes = substr (cadena, 1, pos) after = substr (cadena, pos + 1) de retorno antes de ins después} cuerpo # script {insert de impresión ($ 0, 5, " JellyThink ") de impresión antes de # salida: < vacío > imprimir después de # salida: < vacío > print $ 0 # salida: HelloWorld } ¿Entiendes ahora? Al escribir funciones awk en el trabajo, debe prestar atención a los dos puntos siguientes:

  • Los parámetros son valores pasantes
  • Las variables definidas dentro de los parámetros también son variables globales

    Resumen
    Resumen Un artículo no es fácil, sino también cómo componer este resumen, pero también para verificar cada pieza de código en el artículo, este artículo y "jugar awk" esto, comenzó a escribirse a principios de octubre. Más tarde, arrojé Alibaba Cloud y perdí mucho tiempo. Afortunadamente, finalmente lo terminé hoy. No es facil ! ! Luchando ~~~
  • Copyright © Conocimiento de Windows All Rights Reserved