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