Qualche esempio di utilizzo di awk ed utili risorse web

12 02 2008

In questi giorni mi è capitato di ricorrere al piccolo ma potentissimo comando awk. Le sue potenzialità superano i limiti dell’immaginazione, lo si può usare per tantissimi scopi, ma spesso ci si dimentica di lui e si ricorre ad altri strumenti più macchinosi. Vi mostro ora due esempi di utilizzo di questo comando che ho utilizzato per un lavoretto sulla mia tesi, e che mi hanno fatto risparmiare un bel po’ di tempo😉

Usare awk per splittare stringhe

awk può essere facilmente utilizzato per eseguire lo split di stringhe ricorrendo anche all’uso di espressioni regolari.
$ awk -F ";" '{print $1"\t"$2"\t"$3"\t"$4"\t"$5}' elenco.txt
ove -F “;” indica quale carattere (o l’espressione regolare) delimita le stringhe da separare, print $i stampa le stringhe così ottenute separandole da una tabulazione (indicata da \t). Quindi se in input abbiamo il file di testo (elenco.txt) fatto così:
Metallica;Queen;Muse;Zucchero;Pink Floyd
il comando produrra un output così (qui non si nota molto la tabulazione perché WordPress si mangia gli spazi):
Metallica Queen Muse Zucchero Pink Floyd

al posto di “;” potete inserire qualsiasi espressione regolare inserendola all’interno di / e /. Trovare esempi di espressioni regolari già pronte qui, mentre qua le potete testare. Questo metodo può rilevarsi utile quando di manipolano file CSV i quali generalmente usano il ; (o la ,) come carattere separatore dei campi.

Usare awk per lanciare ripetutamente un programma

Problema:

Devo usare un piccolo programma (in Java) per fare delle conversioni sulle date e stamparle, ed in input ho un elenco di timestamp.

Soluzione rapida:

Uso awk per passare a Java ogni singolo oggetto stringa (il timestamp), invocando di volta in volta il programma Java. Non è la soluzione più bella ne tantomeno efficace perché la JVM ogni volta alloca tutto il codice della classe (ma di questo ne riparleremo in un prossimo post), ma richiede pochissimo tempo nel realizzarla.

Supponiamo di avere il programma Java si chiama DataConverter.java e riceve in ingresso un parametro (il numero): se fosse invocato manualmente ogni volta il comando sarebbe questo (il timestamp è in millisecondi):

$ java DataConverter 1234567890123

che genererà una data in un formato human readable (es: 06/06/1983) da stampare sulla console, ma noi vogliamo automatizzare la procedura avendo a disposizione un file di testo contente n timestamp. Usiamo ancora una volta il magico awk:

$ awk '{print "java DataConverter "$1}' date.txt | sh > dateOutput.txt

Analizziamolo.
Questo intero comando può essere pensato come un’esecuzione concatenata di 3 funzioni (processi) più piccole.

awk ‘{print “java DataConverter “$1}’ date.txt

awk prende in ingresso il file .txt che è un elenco di un numero su ogni riga; esso genera la stringa java DataConverter $1 ove $1 viene di volta in volta sostituito con il numero appena letto.

| sh

significa che la stringa appena generata deve essere interpretata (attraverso l’IPC della pipe | ) dalla shell come un comando da eseguire. Infatti la stringa java DataConverter $1 non è altro che l’invocazione del programmino Java di prima.

> dateOutput.txt

serve per redirige l’output sul file di testo indicato anziché stampare il risultato sulla console. Come vedete con la console potete combinare assieme ben tre linguaggi di programmazione differenti (java, awk, script bash) con l’ausilio di pochissimi comandi😉

Utili risorse per conoscere AWK:


Azioni

Information

6 responses

12 02 2008
linux4life

Uhm veramente utile questo comando, e io neanche lo conoscevo🙂 Ora provvederò a documentarmi perché può fare molto comodo. Grazie per gli ottimi esempi!

12 02 2008
Paso

grazie!🙂

Si si sono veramente comodi, e sono davvero tantissime le situazioni in cui si rivelano utili questi comandi😉

13 02 2008
Lazza

Roba un po’ inusuale all’inizio, ma interessante… Ah se avessi il tempo di mettermi a studiarlo!🙂

27 02 2008
Ottimizzare il codice: un esempio pratico con bash e java (1/2) « Paso’s BloG

[…] riallaccia al post di qualche giorno fa sugli esempi di utilizzo del comando awk intitolato “qualche esempio di utilizzo di awk ed utili risorse web“.In quell’occasione vi avevo accennato al programmino java per convertire dei timestamp […]

4 07 2008
mirco2

Sicuramente può tornarvi utile sapere che c’è un super corso per programmatori JAVA!
Sono previste delle certificazioni in SUN CERTIFIED DEVELOPER FOR JAVA PLATFORM STANDARD EDITION e SUN CERTIFIED BUSINESS COMPONENT FOR JAVA PLATFORM ENTERPRISE EDITION. Tutte le informazioni le trovate cliccando sul link http://accademiainformatica.clickmeter.com/234255.html !

6 08 2010
tonyfire

Complimenti bel post! Ho scritto anche io nel mio blog di awk attraverso un piccolo ma interessante (secondo me) esempio. Se vuoi darci un’occhiata lo trovi qui: http://tonyfire.altervista.org/2010/08/04/come-trovare-i-file-piu-voluminosi-con-find-awk-e-un-po-di-fantasia/ ….

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...




%d blogger cliccano Mi Piace per questo: