Successivo: Concatenazione, Su: Tutti gli operatori [Contenuti][Indice]
Il linguaggio awk usa i comuni operatori aritmetici nella valutazione
delle espressioni. Tutti questi operatori aritmetici seguono le normali regole
di precedenza e funzionano come ci si aspetta.
Il seguente esempio usa un file chiamato grades, che contiene una lista di nomi di studenti e anche i voti di tre verifiche per ogni studente (è una piccola classe):
Pat 100 97 58 Sandy 84 72 93 Chris 72 92 89
Questo programma prende il file grades e stampa la media dei voti:
$ awk '{ sum = $2 + $3 + $4 ; avg = sum / 3
> print $1, avg }' grades
-| Pat 85
-| Sandy 83
-| Chris 84.3333
La lista seguente elenca gli operatori aritmetici in awk,
in ordine di precedenza, da quella più alta a quella più bassa:
x ^ yx ** yElevamento a potenza; x elevato alla potenza y. ‘2 ^ 3’ ha il valore otto; la sequenza di caratteri ‘**’ equivale a ‘^’. (e.c.)
- xNegazione.
+ xPiù unario; l’espressione è convertita in un numero.
x * yMoltiplicazione.
x / yDivisione; poiché tutti i numeri in awk sono numeri in virgola
mobile, il risultato non è arrotondato all’intero — ‘3 / 4’ ha il
valore di 0.75. (Un errore comune, specialmente tra i programmatori in C, è
quello di dimenticare che tutti i numeri in awk sono in virgola mobile,
e che la divisione di costanti rappresentate da numeri interi produce un
numero reale, non un numero intero.)
x % yResto della divisione; subito dopo questa lista, l’argomento viene ulteriormente dettagliato.
x + yAddizione.
x - ySottrazione.
Il più e il meno unari hanno la stessa precedenza, gli operatori di moltiplicazione hanno tutti la stessa precedenza, e l’addizione e la sottrazione hanno la stessa precedenza.
Quando si calcola il resto di ‘x % y’, il quoziente è troncato all’intero e moltiplicato per y. Questo risultato è sottratto da x; quest’operazione è nota anche come “modulo”. La seguente relazione è sempre verificata:
b * int(a / b) + (a % b) == a
Un possibile effetto indesiderato di questa definizione di resto è che ‘x % y’ sia negativo se x è negativo. Così:
-17 % 8 = -1
In altre implementazioni di awk il segno del resto
può essere dipendente dalla macchina.
NOTA: Lo standard POSIX specifica solo l’uso di ‘^’ per l’elevamento a potenza. Per garantire la massima portabilità è meglio non usare l’operatore ‘**’.
Successivo: Concatenazione, Su: Tutti gli operatori [Contenuti][Indice]