Linux comando “awk”: cosa serve e come si usa

ALTRO, LINUX, TUTORIAL

Nel panorama dei linguaggi di programmazione dedicati all’elaborazione di dati basati su testo, AWK occupa una posizione di rilievo grazie alla sua potenza e versatilità. Originariamente concepito per la manipolazione di dati e la generazione di report, AWK ha dimostrato nel tempo di poter estendere le sue funzionalità ben oltre il suo scopo originale, soprattutto quando viene combinato con altri comandi Linux.

In questo articolo, ci proponiamo di esplorare in dettaglio le caratteristiche e le funzionalità di AWK. Inizieremo con una panoramica del processo di installazione di AWK, che è preinstallato su molti sistemi operativi basati su Unix, come Linux e MacOS. Successivamente, ci addentreremo nella sintassi di base di AWK, illustrando la struttura fondamentale dei comandi AWK e le regole che governano l’uso di pattern e azioni.

Proseguiremo con una serie di esempi pratici di utilizzo di AWK, che illustrano come questo linguaggio possa essere utilizzato per manipolare dati e generare report. Questi esempi copriranno una vasta gamma di scenari, dal filtraggio di testo basato su pattern all’elaborazione di dati tabulari.

Inoltre, esploreremo l’uso di AWK nella scrittura di script più complessi, evidenziando come la potenza e la flessibilità di AWK possano essere sfruttate per automatizzare e semplificare compiti di elaborazione dei dati di notevole complessità.

Infine, discuteremo come AWK può essere combinato con altri comandi Linux per eseguire compiti avanzati, come la terminazione di processi basata su nome o l’elaborazione di flussi di dati in pipeline. Questa sezione includerà anche una serie di esempi aggiuntivi che illustrano l’ampia gamma di applicazioni di AWK, dalla divisione di un file in più file alla conversione di caratteri maiuscoli in minuscoli.

L’obiettivo di questo articolo è fornire una panoramica di AWK, illustrando le sue funzionalità attraverso esempi pratici e fornendo le basi per un utilizzo efficace e informato di questo potente strumento. Che siate professionisti dell’IT in cerca di nuove competenze o ricercatori che necessitano di un mezzo efficace per l’elaborazione dei dati, speriamo che questo articolo possa servire come introduzione  nel vostro percorso di apprendimento di AWK.

Installazione di AWK

AWK è preinstallato su molti sistemi operativi basati su Unix, come Linux e MacOS. Puoi verificare se AWK è installato sul tuo sistema digitando `awk –version` nel terminale.

Sintassi di base di AWK

La sintassi di base di un comando AWK è la seguente:

awk '/pattern/ {azione}' file

– `pattern` è un’espressione regolare. AWK eseguirà l’azione su ogni linea del file che corrisponde al pattern.
– `azione` è un’azione che AWK eseguirà su ogni linea che corrisponde al pattern. Se non viene specificata alcuna azione, l’azione predefinita è stampare la linea.
– `file` è il file di input su cui AWK eseguirà il comando.

Esempio di utilizzo di AWK

Supponiamo di avere un file chiamato `students.txt` con il seguente contenuto:

John Doe 23 Mathematics
Jane Doe 22 Physics

Se volessimo stampare solo le linee che contengono “Doe”, potremmo usare il seguente comando AWK:

awk '/Doe/ {print $0}' students.txt

il cui risultato sarebbe:

John Doe 23 Mathematics
Jane Doe 22 Physics

Se volessimo stampare solo il nome e l’età degli studenti, potremmo usare ad esemipio:

awk '{print $1, $2}' students.txt

Questo comando stamperebbe:

John 23
Jane 22

Script AWK

Oltre a essere usato da riga di comando, AWK può anche essere usato per scrivere script più complessi. Un esempio di uno script AWK è il seguente:

BEGIN {
print "Start of the script"
}

/Doe/ {
print $1, $2
}

END {
print "End of the script"
}

Questo script stamperebbe il nome e l’età di ogni studente con il cognome “Doe”, oltre a stampare un messaggio all’inizio e alla fine dello script.

E’ possibile usare awk anche in pipeline con altri comandi shell ad esempio se si volessero killare tutti i processi  con lo stesso nome, ad esmpio “myprocess”, si può usare il comando che combina `ps`, `awk` e `kill`:

ps aux | grep myprocess | awk '{print $2}' | xargs kill -9

In questo comando, `ps aux` elenca tutti i processi in esecuzione sul tuo sistema, mentre `grep myprocess` filtra l’output per includere solo le linee che contengono “myprocess”. `awk ‘{print $2}’` estrae il secondo campo di ogni linea, che è l’ID del processo (PID). Infine, `xargs kill -9` passa questi PID al comando `kill` per terminare i processi.

L’opzione `-9` forza la terminazione del processo e può causare la perdita di dati non salvati.

Esempio 2: Come terminare tutti i processi di un utente specifico

Supponiamo ora che tu voglia terminare tutti i processi dell’utente “myuser”. Puoi fare qualcosa di molto simile all’esempio precedente:

ps aux | grep myuser | awk '{print $2}' | xargs kill -9

Oltre a gestire i processi, Awk può essere utilizzato in una serie di altri modi. Ecco alcuni esempi aggiuntivi:

1. Contare le linee in un file

awk 'END { print NR }' filename

Questo comando conta il numero di righe nel file specificato e stampa il risultato.

2. Stampare le linee di un file che corrispondono a un pattern

awk '/pattern/ {print}' filename

Questo comando stampa solo le linee che contengono il pattern specificato.

3. Dividere un file in più file

awk '{print > ("file" NR ".txt")}' filename

Questo comando divide il file di input in più file, con una linea per file.

4. Somma dei valori di una colonna

awk '{sum+=$1} END {print sum}' filename

Questo comando calcola la somma dei valori nella prima colonna di un file.

5. Convertire i caratteri maiuscoli in minuscoli

echo "HELLO WORLD" | awk '{print tolower($0)}'

Questo comando converte tutte le lettere maiuscole in minuscole.

6. Stampare l’ennesimo campo di una riga

echo "field1 field2 field3 field4" | awk '{print $3}'

Questo comando stampa il terzo campo di una riga.

In ogni caso è possibile approfondire tutte le potenzialità di awk usando il man di riferimento: https://man7.org/linux/man-pages/man1/awk.1p.html

Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    Comments