Podobně jako vestavěné proměnné awk má awk také mnoho vestavěných funkcí pro numerické, řetězcové, vstupní a výstupní operace. Awk má následující tři typy vestavěných kategorií funkcí na vysoké úrovni.
- Vestavěné funkce pro numerické operace
- Vestavěné funkce pro operace s řetězci
- Vestavěné funkce pro operace vstupu a výstupu
Pro ty, kteří s awk začínají, se prosím podívejte na naši sérii příkladů awk, kde jsme diskutovali o — úvodu awk, proměnných awk a operátorech awk.
V tomto článku se podíváme na vestavěné funkce awk Numeric.
1. Funkce Awk int(n)
Funkce int() vám poskytne celočíselnou část daného argumentu. Výsledkem je nejnižší celá část daného n. n je libovolné číslo s nebo bez pohyblivé řádové čárky. Pokud zadáte celé číslo jako argument, tato funkce vrátí totéž. U čísla s plovoucí desetinnou čárkou se zkrátí.
Příklad
$ awk 'BEGIN{ print int(3.534); print int(4); print int(-5.223); print int(-5); }' 3 4 -5 -5
2. Funkce Awk log(n)
funkce log() poskytuje přirozený logaritmus daného argumentu n. log() vrací hodnotu logaritmu pouze v případě, že n je kladné číslo. Pokud zadáte jakékoli neplatné číslo (i záporné), vyvolá to chybu.
Příklad
$ awk 'BEGIN{ print log(12); print log(0); print log(1); print log(-1); }' 2.48491 -inf 0 nan
Ve výše uvedeném výstupu můžete identifikovat, že log(0) je nekonečno, což bylo zobrazeno jako -inf, a log(-1) vám dává chybu nan (není číslo)
3. Funkce Awk sqrt(n)
Funkce sqrt udává kladnou druhou odmocninu pro dané celé číslo n. Tato funkce také přijímá kladné číslo a vrací chybu nan, pokud zadáte záporné číslo jako argument.
Příklad
$ awk 'BEGIN{ print sqrt(16); print sqrt(0); print sqrt(-12); }' 4 0 nan
4. Funkce Awk exp(n)
exp funkce poskytuje e mocninu n.
Příklad
$ awk 'BEGIN{ print exp(123434346); print exp(0); print exp(-12); }' inf 1 6.14421e-06
Ve výše uvedeném výstupu pro exp(1234346) získáte nekonečno výstupu, protože to je mimo rozsah.
5. Funkce Awk sin(n)
Funkce sin() dává sinusovou hodnotu n, přičemž n je v radiánech.
Příklad
$ awk 'BEGIN { print sin(90); print sin(45); }' 0.893997 0.850904
6. Funkce Awk cos(n)
cos() vrací kosinusovou hodnotu n, přičemž n je v radiánech.
Příklad
$ awk 'BEGIN { print cos(90); print cos(45); }' -0.448074 0.525322
7. Awk atan2(m,n) Funkce
Tato funkce vám poskytne arkus-tangens m/n v radiánech.
Příklad
$ awk 'BEGIN { print atan2(30,45); }' 0.588003
8. Funkce Awk rand()
rand() se používá ke generování náhodného čísla mezi 0 a 1. Nikdy nevrací 0 a 1. Vždy vrací hodnotu mezi 0 a 1. Čísla jsou náhodná v jednom awk běhu, ale předvídatelná od běhu k běhu. Awk používá nějaký algoritmus pro generování náhodných čísel. Protože je tento algoritmus pevný, čísla jsou opakovatelná.
Příklad
Následující příklad vygeneruje 1000 náhodných čísel od 0 do 100 a ukazuje, jak často bylo každé číslo použito
$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"; } } $
Sem jsme vložili část výstupu výše uvedeného skriptu.
$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
Z výše uvedeného výstupu se ujistěte, že funkce rand() může velmi často generovat opakovatelná čísla.
9. Funkce Awk srand(n)
srand() se používá k inicializaci náhodného generování s daným argumentem n. Takže vždy, když se spustí provádění programu, začne generovat číslo od n. Pokud není zadán žádný argument, použije se ke generování semene čas dne.
Příklad. Vygenerujte 5 náhodných čísel od 5 do 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; } }
V tomto srand.awk pomocí funkce rand() vygenerujte číslo a vynásobte ho maximální hodnotou, abyste získali číslo s maximem 50, a zkontrolujte, zda vygenerované náhodné číslo již v poli existuje, pokud neexistuje, zvýšit jeho index a také zvýšit počet smyček. takže vygeneruje 5 čísel, jako je toto, a nakonec ve smyčce for od minimálního po maximum a vypíše pouze index, který má hodnotu.
Zde je výstup výše uvedeného skriptu
$ awk -f srand.awk 9 15 26 37 39