CodeGym /Corsi /Docker SELF /Formattazione dei dati usando `awk`

Formattazione dei dati usando `awk`

Docker SELF
Livello 8 , Lezione 2
Disponibile

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:

  1. cat /var/log/syslog — legge il contenuto del file.
  2. awk '{print $5}' — estrae la quinta colonna (nome del processo).
  3. sort — ordina la riga alfabeticamente.
  4. uniq -c — conta il numero di righe uniche.
  5. sort -nr — ordina le righe in base al valore numerico decrescente.
  6. 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!

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION