GNU/Linux >> Tutoriales Linux >  >> Linux

9 potentes funciones incorporadas de Awk para numérico

Al igual que las variables integradas de awk, awk también tiene muchas funciones integradas para entradas numéricas, de cadenas y y operaciones de salida. Awk tiene los siguientes tres tipos de categorías de funciones integradas de alto nivel.

  1. Funciones integradas para operaciones numéricas
  2. Funciones integradas para operaciones de cadenas
  3. Funciones integradas para operaciones de entrada y salida


Para aquellos que son nuevos en awk, consulte nuestra serie de ejemplos de awk en curso, donde discutimos sobre:​​introducción de awk, variables de awk y operadores de awk.

En este artículo, revisemos las funciones incorporadas de awk Numeric.

1. Función awk int(n)

La función int() le da la parte entera del argumento dado. Esto produce la parte entera más baja de n dada. n es cualquier número con o sin punto flotante. Si da el número entero como argumento, esta función devuelve lo mismo. Para el número de coma flotante, se trunca.

Ejemplo

$ awk 'BEGIN{
print int(3.534);
print int(4);
print int(-5.223);
print int(-5);
}'
3
4
-5
-5

2. Función Awk log(n)

La función log () proporciona logarítmico natural del argumento dado n. log() devuelve el valor del logaritmo solo cuando n es un número positivo. Si proporciona un número no válido (incluso negativo), arroja un error.

Ejemplo

$ awk 'BEGIN{
print log(12);
print log(0);
print log(1);
print log(-1);
}'
2.48491
-inf
0
nan

En el resultado anterior, puede identificar que log(0) es infinito, que se mostró como -inf, y log(-1) le da el error nan (No es un número)

3. Función awk sqrt(n)

La función sqrt da la raíz cuadrada positiva para el entero n dado. Esta función también acepta el número positivo y devuelve un error nan si proporciona el número negativo como argumento.

Ejemplo

$ awk 'BEGIN{
print sqrt(16);
print sqrt(0);
print sqrt(-12);
}'
4
0
nan

4. Función Awk exp(n)

función exp proporciona e a la potencia de n.

Ejemplo

$ awk 'BEGIN{
print exp(123434346);
print exp(0);
print exp(-12);
}'
inf
1
6.14421e-06

En la salida anterior, para exp(1234346), te da la salida infinita, porque está fuera de rango.

5. Función Awk sin(n)

la función sin() da el valor seno de n, con n en radianes.

Ejemplo

$ awk 'BEGIN {
print sin(90);
print sin(45);
}'
0.893997
0.850904

6. Awk cos(n) Función

cos() devuelve el valor del coseno de n, con n en radianes.

Ejemplo

$ awk 'BEGIN {
print cos(90);
print cos(45);
}'
-0.448074
0.525322

7. Awk atan2(m,n) Función

Esta función te da el arco tangente de m/n en radianes.

Ejemplo

$ awk 'BEGIN {
print atan2(30,45);

}'
0.588003

8. Función Awk rand()

rand() se usa para generar el número aleatorio entre 0 y 1. Nunca devuelve 0 y 1. Siempre devuelve el valor entre 0 y 1. Los números son aleatorios en una ejecución awk, pero predecibles de una ejecución a otra. Awk usa algún algoritmo para generar los números aleatorios. Dado que este algoritmo es fijo, los números son repetibles.

Ejemplo

El siguiente ejemplo genera 1000 números aleatorios entre 0 y 100 y muestra con qué frecuencia se usó cada número

$cat rand.awk
BEGIN {
while(i<1000)
{
	n = int(rand()*100);
	rnd[n]++;
	i++;
}
for(i=0;i<=100;i++) {
	print i,"Occured", rnd[i], "times";
}
}
$

Pegué algunos de los resultados del script anterior aquí.

$awk -f rand.awk
0 Occured 6 times
1 Occured 16 times
2 Occured 12 times
3 Occured 6 times
4 Occured 13 times
5 Occured 13 times
6 Occured 8 times
7 Occured 7 times
8 Occured 16 times
9 Occured 9 times
10 Occured 6 times
11 Occured 9 times
12 Occured 17 times
13 Occured 12 times

De la salida anterior, asegúrese de que la función rand() puede generar números repetibles con mucha frecuencia.

9. Función Awk srand(n)

srand() se usa para inicializar la generación aleatoria con el argumento dado n. De modo que cada vez que se inicia la ejecución del programa, comienza a generar el número de n. Si no se proporciona ningún argumento, utiliza la hora del día para generar la semilla.

Ejemplo. Genera 5 números aleatorios a partir del 5 al 50

$cat srand.awk
BEGIN {
#initialize the seed with 5.
srand(5);
# Totally I want to generate 5 numbers.
total=5;
#maximum number is 50.
max=50;
count=0;
while(count < total) {
	rnd = int(rand() * max);
	if ( array[rnd] == 0 ) {
		count++;
		array[rnd]++;
	}
}
for ( i=5; i<=max; i++) {
	if ( array[i] )
		print i;
}
}

En este srand.awk, usando la función rand(), genere el número y multiplíquelo con el valor máximo para producir el número con un máximo de 50, y verifique si el número aleatorio generado ya existe en la matriz, si no existe, incrementar su índice y también incrementar el recuento de bucles. para que genere 5 números como este y finalmente en el bucle for desde el número mínimo hasta el máximo, e imprima solo el índice que tiene el valor.

Aquí está el resultado del script anterior

$ awk -f  srand.awk
9
15
26
37
39

Linux
  1. ¿Funciones en variables de Shell?

  2. TagSpaces:un potente organizador de archivos orientado a etiquetas para Linux

  3. Obtener una lista de nombres de funciones en un script de shell

  4. ¿Cuáles son las reglas para los identificadores válidos (por ejemplo, funciones, vars, etc.) en Bash?

  5. Separador de campo predeterminado para awk

Funciones bash

Shell Scripting Parte V:Funciones en Bash

Cmus:un potente reproductor de música de consola para Linux

Bash Scripting - Funciones explicadas con ejemplos

Tutorial de expresiones regulares para ejemplos de Linux (Sed y AWK)

8 potentes variables integradas de Awk:FS, OFS, RS, ORS, NR, NF, FILENAME, FNR