AWK è un linguaggio molto piccolo e ha solo pochi tipi di dati di base. In questa lezione vedremo i numeri e le stringhe.
In AWK i numeri sono implementati come numeri in virgola mobile a doppia precisione. Non c'è alcuna distinzione tra interi, numeri in virgola mobile e double.
AWK riconosce le costanti numeriche ottali (che iniziano con 0) e le costanti numeriche esadecimali (che iniziano con 0x o 0X).
Puoi usare i normali operatori aritmetici +, -, *, /, %.
L'operatore di elevamento a potenza è ^.
Esistono alcune funzioni numeriche predefinite, tra cui le funzioni trigonometriche, la generazione di numeri casuali e int(x) per troncare un numero all'intero più vicino tra x e zero.
Le stringhe di AWK sono sequenze di caratteri. Per specificare una costante stringa si usano le virgolette doppie.
C'è una sola operazione sulle stringhe: la concatenazione. La concatenazione non ha un operatore speciale; basta mettere due stringhe una accanto all'altra per concatenarle:
BEGIN {
hw = "Hello" "World"
print hw
}
# => HelloWorld
print è una istruzione, non una funzione.
print non richiede le parentesi.
AWK offre molte funzioni per la manipolazione delle stringhe. Le conosceremo in dettaglio man mano che procediamo nel percorso.
Non ci sono operatori espliciti per convertire tra numeri e stringhe. AWK lo fa in modo implicito, in base al contesto del programma. Questo rende molto semplice lavorare con i valori dei campi di input: in genere AWK fa proprio quello che vuoi.
print x + y convertirà i valori delle variabili x e y in numeri grazie all'operazione numerica +.print x y convertirà i valori delle variabili x e y in stringhe grazie all'operazione di concatenazione.Se vuoi essere esplicito, 0 + x dà la rappresentazione numerica di x e "" x dà la rappresentazione come stringa di x.
Il modo in cui AWK converte una stringa in un numero può confondere. Un modo semplice per pensarci è che AWK legge i «caratteri numerici» dall'inizio di una stringa finché non trova un carattere «non numerico». Ecco alcuni esempi:
"2.5" si converte nel numero 2.5;"1e3" si converte nel numero 1000 (notazione scientifica);"456abc" si converte nel numero 456 (dato che a non è un «numerale», la conversione si ferma lì)."abc789" si converte nel numero 0 (non ci sono numeri all'inizio della stringa).Stai aiutando un amico a generare un report dalle letture che ha effettuato in diversi angoli del suo giardino. Sfortunatamente, il tuo amico ha memorizzato i dati in un formato strano. Ogni lettura è un insieme di campi separati da virgole. Tuttavia, ha memorizzato i numeri a due cifre in due colonne.
| numero del campo | significato |
|---|---|
| 1 | numero identificativo |
| 2 | posizione |
| 3 | prima lettura, cifra delle decine |
| 4 | prima lettura, cifra delle unità |
| 5 | seconda lettura, cifra delle decine |
| 6 | seconda lettura, cifra delle unità |
Per una riga di input come 101,house,4,2,5,4
42,54.Il compito è trovare la media delle due letture e produrre i risultati di ogni riga nel formato seguente
#<id>, <label> = <average>
Dato che la media di 42 e 54 è 48, l'output per la riga di esempio dovrebbe essere:
#101, house = 48
Iscriviti a Exercism per imparare e padroneggiare AWK con 3 concetti92 esercizi e il mentoring di persone reali, tutto gratis.