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 { while ((inizio = index($0, "/*")) != 0) { prima = substr($0, 1, inizio - 1) # parte iniziale della stringa dopo = substr($0, inizio + 2) # ... */ ... while ((fine = index(dopo, "*/")) == 0) { # */ è nella parte finale? # passa ai record seguenti if (getline <= 0) { print("Fine file inattesa o errore:", ERRNO) > "/dev/stderr" exit } # costruisce la riga usando la concatenazione di stringhe dopo = dopo $0 } dopo = substr(dopo, fine + 2) # rimuove il commento # costruisce 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 la sezione Concatenazione di stringhe)
e le funzioni predefinite index()
e substr()
(vedi la sezione Funzioni di manipolazione di stringhe).
Sostituendo ‘print $0’ con altre
istruzioni, si possono effettuare elaborazioni più complesse sull’input
decommentato, come ricercare corrispondenze di un’espressione regolare.
Ecco un esempio di file in input:
mon/*comment*/key rab/*commen t*/bit horse /*comment*/more text part 1 /*comment*/part 2 /*comment*/part 3 no comment
Quando lo si esegue, l’output è:
$ awk -f strip_comments.awk example_text -| monkey -| rabbit -| horse more text -| part 1 part 2 part 3 -| no comment
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 la sezione L’istruzionenext
.
Successivo: Getline variabile, Su: Getline [Contenuti][Indice]