Formattazione dei dati usando awk
1. Introduzione a awk
awk
— è uno strumento potente per la gestione dei dati testuali. Se immaginiamo un file di testo come una tabella, dove le righe sono le righe (logico) e le colonne sono dati separati da spazi, allora awk
diventa il nostro miglior amico. Ti permette di selezionare rapidamente colonne, filtrare righe, formattare i dati e persino eseguire operazioni aritmetiche.
È stato chiamato così in onore dei suoi autori — Alfred Aho, Peter Weinberger e Brian Kernighan (proprio lui, lo stesso che ha partecipato alla creazione del linguaggio C).
Il concetto principale di awk
è il trattamento dei dati tramite modelli e azioni, che lo rendono simile a un piccolo linguaggio di programmazione.
Sintassi di awk
La sintassi base del comando è la seguente:
awk 'modello {azione}' file
modello
— condizione che viene verificata per ogni riga del file.azione
— operazioni eseguite sulle righe che corrispondono al modello.- Se non c'è un modello, l'azione viene eseguita per ogni riga.
Esempio:
awk '{print $1}' data.txt
Questo comando stamperà la prima colonna ($1
) per ogni riga del file data.txt
.
2. Funzionalità principali di awk
1. Selezione delle colonne
Il modo più semplice per utilizzare awk
è selezionare una o più colonne da un file. Un campo è indicato come $n
, dove n
è il numero della colonna, a partire da 1.
Esempio:
Mostrare la prima e la terza colonna:
awk '{print $1, $3}' data.txt
Supponiamo che il nostro file data.txt
sia così:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
Risultato:
John Engineer
Jane Designer
Mike Developer
2. Elaborazione condizionale delle righe
Le condizioni permettono di elaborare solo le righe che soddisfano certi criteri.
Esempio:
Mostrare le righe dove il valore nella seconda colonna è maggiore di 27:
awk '$2 > 27 {print $1, $2}' data.txt
Risultato:
Jane 30
Mike 28
3. Operazioni aritmetiche
awk
è in grado di eseguire operazioni aritmetiche. Questo risulta utile quando hai bisogno di calcolare qualcosa al volo.
Esempio:
Aggiungere 10 al valore nella seconda colonna:
awk '{print $1, $2+10}' data.txt
Risultato:
John 35
Jane 40
Mike 38
4. Conteggio delle righe
awk
sa automaticamente quante righe sono state elaborate. Questa informazione è contenuta nella variabile NR
(Number of Records).
Esempio:
Contare il numero di righe nel file:
awk 'END {print NR}' data.txt
Risultato:
3
3. Funzionalità avanzate
1. Formattazione dell'output
awk
supporta un potente output formattato usando la funzione printf
. Questo è analogo alla funzione printf
in C.
Esempio:
Stampare i dati allineati:
awk '{printf "%-10s %-5s %-10s\n", $1, $2, $3}' data.txt
Risultato:
John 25 Engineer
Jane 30 Designer
Mike 28 Developer
2. Variabili
Puoi usare le variabili per memorizzare dati e semplificare il tuo lavoro.
Esempio:
Calcolare la somma della seconda colonna:
awk '{sum += $2} END {print "Età Totale:", sum}' data.txt
Risultato:
Età Totale: 83
3. Espressioni regolari
awk
supporta espressioni regolari per cercare righe.
Esempio:
Stampare le righe dove nella prima colonna c'è la lettera J
:
awk '/J/ {print $0}' data.txt
Risultato:
John 25 Engineer
Jane 30 Designer
4. Esempio pratico
1. Analisi del log di sistema
Supponiamo di avere un file di log di sistema /var/log/syslog
, e vogliamo scoprire quali processi sono menzionati più frequentemente.
Comando:
cat /var/log/syslog | awk '{print $5}' | sort | uniq -c | sort -nr | head -10
Cosa fa:
cat /var/log/syslog
— legge il contenuto del file.awk '{print $5}'
— estrae la quinta colonna (nome del processo).sort
— ordina la riga alfabeticamente.uniq -c
— conta il numero di righe uniche.sort -nr
— ordina le righe in base al valore numerico decrescente.head -10
— mostra i primi 10 processi.
2. Preparazione di un rapporto sugli stipendi
Abbiamo il file salaries.txt
:
John 25 4000
Jane 30 5000
Mike 28 4500
Compito:
Aumentare gli stipendi del 10% e mostrare il report finale.
Soluzione:
awk '{new_salary = $3 * 1.1; printf "%-10s %-5s %-10.2f\n", $1, $2, new_salary}' salaries.txt
Risultato:
John 25 4400.00
Jane 30 5500.00
Mike 28 4950.00
5. Errori comuni nell'uso di awk
Problemi con i separatori
Di default, awk
utilizza spazi o tabulazioni come separatori. Se i tuoi dati sono separati da qualcos'altro (ad esempio, virgole o due punti), devi specificarlo con l'opzione -F
.
Esempio:
File data.csv
:
John,25,Engineer
Jane,30,Designer
Mike,28,Developer
Comando per lavorare con CSV:
awk -F',' '{print $1, $3}' data.csv
Risultato:
John Engineer
Jane Designer
Mike Developer
Campi saltati a causa di formattazione scorretta
A volte le righe possono contenere spazi inattesi o colonne mancanti. Questo potrebbe causare errori. È sempre utile controllare i dati prima di iniziare a lavorare.
Applicazioni pratiche
Hai appena imparato a usare awk
per analizzare i log di sistema, elaborare dati sugli stipendi e creare report. Queste competenze ti saranno utili per lavorare con grandi database, file CSV e log su progetti reali. Se lavori in DevOps, l'analisi dei log di sistema con awk
diventerà il tuo superpotere. E se sei uno sviluppatore, questo è un ottimo modo per manipolare rapidamente i dati direttamente dal terminale.
Per approfondire awk
, ti consiglio di dare un'occhiata alla documentazione ufficiale di GNU Awk. Ora sai sicuramente come rendere i tuoi dati più gestibili!
GO TO FULL VERSION