5.0 Padroneggiare le variabili integrate di AWK
5.1. Il ruolo delle variabili predefinite
Le variabili predefinite sono una funzionalità fondamentale di AWK, in quanto forniscono accesso automatico alle informazioni sui dati di input, sull'ambiente di esecuzione e sullo stato del programma. Padroneggiare il loro utilizzo è essenziale per scrivere script AWK potenti, concisi e idiomatici.
5.2. Variabili AWK standard
- ARGC e ARGV ARGC contiene il numero di argomenti della riga di comando, mentre ARGV è un array che contiene gli argomenti stessi. Si noti che ARGV[0] contiene il nome del comando, awk.
- NF (Numero di campi) Questa variabile contiene il numero totale di campi nel record corrente. Viene ricalcolato a ogni lettura del record.
- NR (Numero di registrazione) Questa variabile funge da contatore globale, memorizzando il numero cumulativo di record elaborati dall'inizio dello script.
- FNR (numero di fascicolo del record) Simile a NR, FNR memorizza il numero di record, ma viene reimpostato a 1 per ogni nuovo file di input elaborato. Questo lo rende prezioso per le operazioni multi-file. Per illustrare, si considerino due file: data1.txt contenente A\nB e data2.txt contenente C\nD.
- Si noti che FNR viene reimpostato a 1 per data2.txt, mentre NR continua ad aumentare.
- FS (separatore di campo) Definisce il carattere o l'espressione regolare utilizzata per separare i campi nel record di input. L'impostazione predefinita è uno spazio vuoto (uno o più spazi o tabulazioni).
- RS (Separatore di record) Definisce il carattere utilizzato per separare i record nell'input. Il carattere predefinito è un carattere di nuova riga (\n).
- OFS (separatore di campo di uscita) Definisce il separatore posizionato tra i campi nell'output quando si utilizza l'istruzione print con più argomenti. L'impostazione predefinita è uno spazio singolo.
- ORS (separatore di record di output) Definisce il separatore posizionato alla fine di ogni record nell'output. Il valore predefinito è un carattere di nuova riga (\n).
- NOME DEL FILE Questa variabile contiene il nome del file di input attualmente in fase di elaborazione.
- **$0 e n** Come precedentemente notato, `0 rappresenta l'intero record corrente, mentre n` (ad esempio, `1, $2`) rappresenta l'n-esimo campo in quel record.
- RSTART & RLENGTH Utilizzato con la funzione match(). Dopo una corrispondenza riuscita, RSTART memorizza la posizione iniziale (indice) della sottostringa corrispondente, mentre RLENGTH ne memorizza la lunghezza.
- CONVFMT e OFMT Queste variabili controllano il formato per la conversione dei numeri in stringhe (CONVFMT) e il formato di output per i numeri stampati da print (OFMT). Il valore predefinito per entrambi è %.6g.
- SOTTOSET Questa variabile specifica il separatore di indice utilizzato per simulare array multidimensionali. Il carattere predefinito è il carattere non stampabile \034.
- AMBIENTE Un array associativo che fornisce l'accesso alle variabili di ambiente della shell.
5.3. Variabili specifiche di GNU AWK (GAWK)
GAWK fornisce diverse estensioni allo standard POSIX tramite il proprio set di variabili integrate.
- ARGINDO: L'indice nella matrice ARGV che punta al file corrente in fase di elaborazione.
- IGNORECASO: Se impostato su un valore diverso da zero, abilita la corrispondenza di modelli senza distinzione tra maiuscole e minuscole per tutte le operazioni di espressioni regolari.
- ERRORE: Quando un'operazione di reindirizzamento o close() fallisce, questa variabile contiene una stringa di messaggio di errore dipendente dal sistema.
- LARGHEZZA DI CAMPO: Un elenco di numeri separati da spazi che indica a GAWK di analizzare i record in base a larghezze di campo fisse anziché utilizzare la variabile FS.
- LINT: Fornisce un controllo dinamico sul linting. Impostandolo, vengono visualizzati avvisi su costrutti di codice non portabili o discutibili.
- PROCINFO: Un array associativo contenente informazioni sul processo in esecuzione, come il suo ID di processo (PROCINFO[“pid”]).
- DOMINIO TESTO: Utilizzato per l'internazionalizzazione, specificando il dominio di testo per il recupero delle stringhe di programma localizzate.
- MODALITÀ BIN: Utilizzato su sistemi non POSIX per specificare la modalità binaria per le operazioni di I/O sui file.
Ora che abbiamo capito come AWK memorizza e fornisce accesso ai dati tramite variabili, il passo logico successivo è esplorare gli operatori utilizzati per manipolare tali dati.