Successivo: , Su: Tutti gli operatori   [Contenuti][Indice]


6.2.1 Operatori aritmetici

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 ^ y
x ** y

Elevamento a potenza; x elevato alla potenza y. ‘2 ^ 3’ ha il valore otto; la sequenza di caratteri ‘**’ equivale a ‘^’. (e.c.)

- x

Negazione.

+ x

Più unario; l’espressione è convertita in un numero.

x * y

Moltiplicazione.

x / y

Divisione; 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 % y

Resto della divisione; subito dopo questa lista, l’argomento viene ulteriormente dettagliato.

x + y

Addizione.

x - y

Sottrazione.

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: , Su: Tutti gli operatori   [Contenuti][Indice]