Successivo: Getline variabile, Su: Getline [Contenuti][Indice]
getline
senza argomentiIl comando getline
può essere usato senza argomenti per leggere l’input
dal file in input corrente. Tutto quel che fa in questo caso è leggere il
record in input successivo e dividerlo in campi. Questo è utile se è
finita l’elaborarezione del record corrente, e si vogliono fare delle
elaborazioni particolari sul record successivo proprio adesso.
Per esempio:
# rimuovere il testo tra /* e */, compresi { if ((i = index($0, "/*")) != 0) { prima = substr($0, 1, i - 1) # la parte iniziale della stringa dopo = substr($0, i + 2) # ... */ ... j = index(dopo, "*/") # */ è nella parte finale? if (j > 0) { dopo = substr(dopo, j + 2) # rimozione del commento } else { while (j == 0) { # passa ai record seguenti if (getline <= 0) { print("Fine file inattesa o errore:", ERRNO) > "/dev/stderr" exit } # incrementare la riga usando la concatenazione di stringhe dopo = dopo $0 j = index(dopo, "*/") # è */ nella parte finale? if (j != 0) { dopo = substr(dopo, j + 2) break } } } # incrementare la riga di output usando la concatenazione # di stringhe $0 = prima dopo } print $0 }
Questo programma awk
cancella i commenti in stile C
(‘/* … */’) dall’input.
Usa diverse funzionalità che non sono ancora state trattate, incluse la
concatenazione di stringhe
(vedi Concatenazione)
e le funzioni predefinite index()
e substr()
(vedi Funzioni per stringhe).
Sostituendo ‘print $0’ con altre
istruzioni, si possono effettuare elaborazioni più complesse sull’input
decommentato, come ricercare corrispondenze di un’espressione regolare.
(Questo programma ha un piccolo problema: non funziona se c’è più di un
commento che inizia e finisce
sulla stessa riga.)
Questa forma del comando getline
imposta NF
,
NR
, FNR
, RT
e il valore di $0
.
NOTA: Il nuovo valore di
$0
è usato per verificare le espressioni di ricerca di ogni regola successiva. Il valore originale di$0
che ha attivato la regola che ha eseguito lagetline
viene perso. A differenza digetline
, l’istruzionenext
legge un nuovo record ma inizia a elaborarlo normalmente, a partire dalla prima regola presente nel programma. Vedi Istruzione next.
Successivo: Getline variabile, Su: Getline [Contenuti][Indice]