Successivo: Modificatori di formato, Precedente: Printf Fondamenti, Su: Printf [Contenuti][Indice]
Uno specificatore di formato inizia col carattere ‘%’ e termina con
una lettera di controllo del formato; e dice all’istruzione
printf come stampare un elemento. La lettera di controllo del
formato specifica che tipo
di valore stampare. Il resto dello specificatore di formato è costituito da
modificatori opzionali che controllano come stampare il valore,
per esempio stabilendo la larghezza del campo. Ecco una lista delle
lettere di controllo del formato:
%a, %AUn numero in virgola mobile scritto nella forma
[-]0xh.hhhhp+-dd
(formato esadecimale virgola mobile nel compilatore C99).
Per %A,
si usano lettere maiuscole invece che lettere minuscole.
NOTA: Lo standard POSIX in vigore richiede il supporto di
%ae di%Ainawk. Per quanto ci consta, oltre agawk, la sola altra versione diawkche fornisce questo supporto è BWKawk. Se si usano questi formati, il programma in questione è quindi estremamente non-portabile!Inoltre, questi formati non sono disponibili su alcun sistema in cui la funzione di libreria C
printf()utilizzata dagawknon li supporta. Al momento in cui questo libro è stato scritto, fra i sistemi su cui è stato portatogawk, il solo sistema noto che non li supporta è OpenVMS.
%cStampa un numero come un carattere; quindi, ‘printf "%c", 65’ stampa la lettera ‘A’. L’output per un valore costituito da una stringa è il primo carattere della stringa stessa.
NOTA: Lo standard POSIX richiede che il primo carattere di una stringa sia stampato. In localizzazioni con caratteri multibyte,
gawktenta di convertire i primi byte della stringa in un carattere multibyte valido e poi di stampare la codifica multibyte di quel carattere. Analogamente, nella stampa di un valore numerico,gawkammette che il valore appartenga all’intervallo numerico di valori che possono essere contenuti in un carattere multibyte. Se la conversione alla codifica multibyte non riesce,gawkusa gli ultimi otto bit della cifra (quelli meno significativi) come carattere da stampare.Altre versioni di
awkgeneralmente si limitano a stampare il primo byte di una stringa o i valori numerici che possono essere rappresentati in un singolo byte (0–255). (a.b.)
%d, %iStampa un numero intero in base decimale. Le due lettere di controllo sono equivalenti. (La specificazione ‘%i’ è ammessa per compatibilità con ISO C.)
%e, %EStampa un numero nella notazione scientifica (con uso di esponente). Per esempio:
printf "%4.3e\n", 1950
stampa ‘1.950e+03’, con un totale di quattro cifre significative, tre delle quali seguono il punto che separa la parte intera da quella decimale [in Italia si usa la virgola al posto del punto] (L’espressione ‘4.3’ rappresenta due modificatori, introdotti nella prossima sottosezione). ‘%E’ usa ‘E’ invece di ‘e’ nell’output.
%fStampa un numero in notazione in virgola mobile. Per esempio:
printf "%4.3f", 1950
stampa ‘1950.000’, con un minimo di quattro cifre significative, tre delle quali vengono dopo il punto decimale. (L’espressione ‘4.3’ rappresenta due modificatori, introdotti nella prossima sottosezione).
In sistemi che implementano il formato in virgola mobile, come specificato dallo standard IEEE 754, il valore infinito negativo è rappresentato come ‘-inf’ o ‘-infinity’, e l’infinito positivo come ‘inf’ o ‘infinity’. Il valore speciale “not a number” [non è un numero] viene scritto come ‘-nan’ o ‘nan’ (vedi la sezione Altre cose da sapere).
%FCome ‘%f’, ma i valori di infinito e di “not a number” sono scritti in lettere maiuscole.
Il formato ‘%F’ è un’estensione POSIX allo standard ISO C; non tutti
i sistemi lo prevedono. In tali casi,
gawk usa il formato ‘%f’.
%g, %GStampa un numero usando o la notazione scientifica o quella in virgola mobile, scegliendo la forma più concisa; se il risultato è stampato usando la notazione scientifica, ‘%G’ usa ‘E’ invece di ‘e’.
%oStampa un numero intero in ottale, senza segno (vedi la sezione Numeri ottali ed esadecimali).
%sStampa una stringa.
%uStampa un numero intero decimale, senza segno.
(Questo formato è poco usato, perché tutti i numeri in awk
sono in virgola mobile; è disponibile principalmente per compatibilità col
linguaggio C.)
%x, %XStampa un intero esadecimale senza segno; ‘%X’ usa le lettere da ‘A’ a ‘F’ invece che da ‘a’ a ‘f’ (vedi la sezione Numeri ottali ed esadecimali).
%%Stampa un solo carattere ‘%’. Questa notazione non serve per stampare alcun argomento e ignora eventuali modificatori.
NOTA: Quando si usano lettere di controllo del formato per numeri interi per stampare valori esterni all’intervallo massimo disponibile nel linguaggio C per i numeri interi,
gawkusa lo specificatore di formato ‘%g’. Se si specifica l’opzione --lint sulla riga di comando (vedi la sezione Opzioni sulla riga di comando),gawkemette un messaggio di avvertimento. Altre versioni diawkpossono stampare valori non validi, o comportarsi in modo completamente differente. (a.b.)
NOTA: Lo standard IEEE 754 per l’aritmetica in virgola mobile consente di avere valori speciali per rappresentare “infinito” (sia positivo che negativo) e valori che sono “non numerici” (NaN - [Not a Number]).
L’input e l’output di tali valori avviene sotto forma di stringhe di testo. Ciò pone dei problemi nel linguaggio
awk, che esisteva già prima della definizione dello standard IEEE. Dettagli ulteriori si possono trovare in Confronto tra standard e uso corrente; si prega di fare riferimento a quel testo.
Successivo: Modificatori di formato, Precedente: Printf Fondamenti, Su: Printf [Contenuti][Indice]