Come usare il comando awk in shell : manuale sintassi ed esempi
Awk è uno strumento di frequente utilizzo nella programmazione shell, che mi trovo spesso a impiegare in combinazione con altri comandi per affrontare principalmente questioni di analisi di stringhe. Ho ritenuto quindi opportuno riprendere il manuale di awk e presentarlo nuovamente, arricchendolo con una serie di esempi pratici.
Cominciamo con una descrizione del comando, partendo dal manuale e dalla sua sintassi.
Ma cos’è precisamente awk e cosa permette di fare?
Awk è più di un semplice comando: si tratta di un linguaggio dedicato alla scansione e all’elaborazione di modelli testuali.
Per esempi su come può essere usato vi consiglio di leggere questo articolo che ho scritto di recente.
Di seguito vi riporto il man che può esser usato come base di partenza per comprendere le potenzialità dello strumento.
SINTASSI
awk [ -F sepstring ] [ -v assegnazione ] ... program [ argomento ... ]
awk [ -F sepstring ] -f progfile [ -f progfile ] ... [ -v assegnazione ] ...
[ argomento ... ]
DESCRIZIONE
Awk è un comando shell che permette l’esecuzione di sequenze di istruzioni scritte nel suo stesso linguaggio. Pertanto, è corretto considerarlo un linguaggio di programmazione, specificamente orientato alla manipolazione di dati testuali.
Per capire meglio il suo funzionamento, esploriamo la sua struttura così come delineata nel manuale di Linux, fornendo alcune definizioni chiave:
- Awk processa dati testuali, provenienti sia da file che da flussi.
- Gli input dati vengono suddivisi in record e campi.
- Awk lavora su un record per volta, fino al termine dell’input.
- I record sono distinti tra loro da un carattere noto come separatore di record.
- Il separatore di record di default è il carattere di nuova linea, il che implica che ogni riga nei dati di testo corrisponde a un record.
- È possibile stabilire un nuovo separatore di record utilizzando la variabile RS.
- Ogni record è composto da campi separati dal separatore di campo. Di default, i campi sono distinti da uno spazio, che può comprendere uno o più caratteri tab, spazio e nuova riga.
- I campi in ogni record sono identificati dal simbolo del dollaro ($) seguito dal numero del campo, il quale inizia da 1.
- Il primo campo è rappresentato con $1, il secondo con $2 e così via. L’ultimo campo può essere indicato anche utilizzando la variabile speciale $NF.
- Per fare riferimento all’intero record si utilizza $0.
OPZIONI
Sono supportate le seguenti opzioni:
-F sepstring
Definisce il separatore del campo di input. Questa opzione è
equivalente a:
-v FS=sepstring
tranne che se -F sepstring e -v FS=sepstring sono
entrambi utilizzati; in tak caso non è specificato se l' assegnazione FS
risultante da -F sepstring viene elaborata nel comando
per ordine di riga o viene elaborato dopo l'ultimo -v
FS=sepstring.
-f progfile
Specifica il percorso del file progfile contenente un
programma awk. Un percorso definito come '-' denota lo
standard inpu.
-v assegnazione
L'applicazione garantisce che l' argomento di assegnazione
sia nella stessa forma di un operando di assegnazione.
L'assegnazione di una variabile specificata deve avvenire prima di
eseguire il programma awk , comprese le azioni
associate ai modelli BEGIN (se presenti).
OPERANDI ED OPERATORI
Sono supportati i seguenti operandi:
program Se non viene specificata alcuna opzione -f , il primo operando di awk
sarà il testo del programma awk . L'applicazione
interpreta l' operando programma come argomento singolo ad awk.
Se il testo non termina con un <newline>, awk
interpreterà il testo come se ci fosse.
argomento Uno dei seguenti tipi di argomento può essere
utilizzato anche insieme:
file Indica il percorso di un file che contiene l'input
da legger Se non sono specificati operandi di file o se un operando di file
è '-' , sarà utilizzato lo standard input.
assignment
Un operando che inizia con un <underscore>
o un qualunque carattere alfabetico del
set di caratteri (vedi tabella in Base
Volume delle definizioni di POSIX.1-2017, Sezione
6.1 , Portable Character Set ), seguito da un
sequenza di caratteri di sottolineatura, cifre e
alfabetici dal set di caratteri portatile,
seguito dal carattere '=' indica
una variabile di assignment piuttosto che un percorso.
I caratteri prima di '=' rappresentano il
nome di una variabile awk ; se quel nome è una
parola riservata awk, il comportamento
è indefinito.

Comments