[Guida] Gawk, introduzione al linguaggio per manipolare i contenuti dei file

In questa mini guida voglio fare una breve introduzione al linguaggio Gawk.

Questo strumento è davvero utile per manipolare i file, soprattutto se contenenti dati strutturati in tabelle. In conclusione, vi mostrerò anche come realizzare un piccolo report completo, che consenta di esporre i propri dati in maniera sintetica.

Gawk, tutto in una linea di codice

Gawk è l’implementazione nell’ambito del Progetto GNU del linguaggio di programmazione AWK, sviluppato originariamente per i sistemi UNIX verso la fine degli anni 70.

AWK, a sua volta, è un linguaggio di scripting finalizzato alla manipolazione di dati di tipo testuale, sia in forma di file, che di flusso di dati, provenienti dallo standard input.

Utilizzando il linguaggio Awk, quindi, si possono effettuare, con una singola riga di codice, una serie di operazioni complesse come l’estrazione e manipolazione dei dati, la creazione di report o l’esecuzione di calcoli. Per ottenere gli stessi risultati utilizzando linguaggi di programmazione tradizionali, sarebbe necessario creare un programma molto più complesso.

gawk tutorial

Esempi di filtri

Awk è un linguaggio di scansione ed elaborazione dei pattern. Per impostazione predefinita, legge lo standard input, lo processa linea per linea, e scrive lo standard output. La sintassi, quindi, sarà:

gawk [ opzioni in stile POSIX o GNU ] -f file di programma [ -- ] file gawk [ opzioni in stile POSIX o GNU ] [ -- ] testo del programma file

In particolare, per quanto riguarda il file di programma da utilizzare in Gawk, questo deve essere strutturato come il seguente schema:

@include "nome_del_file" @load "nome_del_file" criterio di ricerca { istruzioni } function nome(lista di parametri) { istruzioni }

Come fare, dunque, per processare un file con Awk?

Provate ad utilizzare questo come file d’esempio, è un semplice elenco dei film di De Niro dal 1968 al 2016, il relativo punteggio di Rotten Tomato ed il titolo del film. Il programma divide automaticamente ogni record in campi, numerando ciascuna colonna come $1, $2, $3 e così via. Di default, per separare ogni campo utilizza lo spazio, che corrisponde alla situazione del file di esempio. Per fortuna è possibile anche fornire un altro parametro, utilizzando l’opzione -F seguita dal separatore desiderato. Se vogliamo, ad esempio, stampare solo l’anno ed il voto del film, l’istruzione sarà:

awk '{print $1, $2}' deniro

Molto più interessante è la possibilità di filtrare il contenuto del file, per trovare la corrispondenza con un particolare pattern. Si intuisce la potenzialità di queste direttive dai seguenti esempi:

gawk '$1==1997{print}' deniro #stampa tutti i film del 1997
gawk '$1>1997{print}' deniro #stampa tutti i film dal 1998 in poi

Come creare un piccolo report

Vediamo adesso come creare un piccolo report in Gawk. Dato il file di esempio, andrò a filtrarne in contenuto e ad aggiungere una intestazione e dei dati di sintesi conclusivi. Non è richiesta alcuna particolare conoscenza di programmazione, è tutto molto intuitivo. Nella creazione delle view, è di solito opportuno inserire degli header alle colonne, per permettere una migliore fruizione dei contenuti. Si può effettuare questa operazione in combinazione con le altre appena viste, grazie ad un criterio di Awk, chiamato BEGIN. Questo, infatti, permette di eseguire un’istruzione prima dell’inizio del processo vero e proprio dei record. Un esempio renderà il tutto più chiaro:

#Aggiungiamo i titoli Anno, Voto e Titolo alle nostre colonne, mostrando solo i film successivi al 2001
#%-2s %-6s %s\n indicano la posizione delle etichette con la relativa spaziatura
gawk 'BEGIN{printf("%-2s %-6s %s\n","Anno","Voto%","Titolo")} $1>2001{print}' deniro

gawk headers

Il report con gli header

Per rendere completo il report, aggiungiamo anche un’ultima riga di coda, che ci mostra il numero di film girati dall’attore dal 2001 in poi e la media dei voti. Ciò è possibile grazie ad un altro criterio utilizzabile in Gawk, END. Questo, simmetricamente a BEGIN, esegue la direttiva post processo dei record. Per quanti di voi non sono avvezzi alle logiche base della programmazione, questa istruzione potrebbe risultare un pochino più complessa. Vado semplicemente a creare due variabili all’inizio dell’istruzione, che si andranno via via incrementando, fino ad assumere i valori desiderati:

gawk 'BEGIN{printf("%-2s %-6s %s\n","Anno","Voto%","Titolo")} BEGIN{x=0} BEGIN{y=0} $1>2000{x+=$2} $1>2000{y+=1} $1>2000{print} END{printf("Media voti:%s\n",x/y)}' deniro

gawk report completo

Il report completo

Per approfondire ulteriori dettagli di questo potente linguaggio, vi consiglio di visionare l’apposita pagina del manuale accessibile tramite l’istruzione man gawk. Lo consiglio davvero a tutti, anche ai non tecnici. Manipolare questo tipo di file, infatti, potrebbe risultare utilissimo in tantissime occasioni.

sharing-caring-1

Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.

Fonte: https://www.lffl.org/2020/10/guida-introduttiva-gawk.html

Visited 6 times, 1 visit(s) today
Se vuoi sostenerci, puoi farlo acquistando qualsiasi cosa dai diversi link di affiliazione che abbiamo nel nostro sito o partendo da qui oppure alcune di queste distribuzioni GNU/Linux che sono disponibili sul nostro negozio online, quelle mancanti possono essere comunque richieste, e su cui trovi anche PC, NAS e il ns ServerOne. Se ti senti generoso, puoi anche donarmi solo 1€ o più se vuoi con PayPal e aiutarmi a continuare a pubblicare più contenuti come questo. Grazie!

Hai dubbi o problemi? Ti aiutiamo noi!

Se vuoi rimanere sempre aggiornato, iscriviti al nostro canale Telegram.
Se vuoi ricevere supporto per qualsiasi dubbio o problema, iscriviti alla nostra community Facebook o gruppo Telegram.
Cosa ne pensi? Fateci sapere i vostri pensieri nei commenti qui sotto.
Ti piace quello che leggi? Per favore condividilo con gli altri.
Amazon Music
Scopri le ultime offerte per dischi ssd su Acquista su Amazon
Scopri le ultime offerte per memorie RAM DDR su Acquista su Amazon
Scopri le ultime offerte per Chromebook su Acquista su Amazon
Scopri le ultime offerte per Raspberry su Acquista su Amazon

Potrebbero interessarti anche...

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.