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.
Sono amante della tecnologia e delle tante sfumature del mondo IT, ho partecipato, sin dai primi anni di università ad importanti progetti in ambito Internet proseguendo, negli anni, allo startup, sviluppo e direzione di diverse aziende; Nei primi anni di carriera ho lavorato come consulente nel mondo dell’IT italiano, partecipando attivamente a progetti nazionali ed internazionali per realtà quali Ericsson, Telecom, Tin.it, Accenture, Tiscali, CNR. Dal 2010 mi occupo di startup mediante una delle mie società techintouch S.r.l che grazie alla collaborazione con la Digital Magics SpA, di cui sono Partner la Campania, mi occupo di supportare ed accelerare aziende del territorio .
Attualmente ricopro le cariche di :
– CTO MareGroup
– CTO Innoida
– Co-CEO in Techintouch s.r.l.
– Board member in StepFund GP SA
Manager ed imprenditore dal 2000 sono stato,
CEO e founder di Eclettica S.r.l. , Società specializzata in sviluppo software e System Integration
Partner per la Campania di Digital Magics S.p.A.
CTO e co-founder di Nexsoft S.p.A, società specializzata nella Consulenza di Servizi in ambito Informatico e sviluppo di soluzioni di System Integration, CTO della ITsys S.r.l. Società specializzata nella gestione di sistemi IT per la quale ho partecipato attivamente alla fase di startup.
Sognatore da sempre, curioso di novità ed alla ricerca di “nuovi mondi da esplorare“.
Comments