Estrarre dati con Awk

Awk, o meglio la sua moderna implementazione Gawk, può essere definito come un linguaggio di scripting per l’elaborazione dei dati nei file di testo. L’accostamento a grep è lecito, ma awk, risulta più flessibile, potente e inevitabilmente maggiormente complesso.
Qui di seguito elencherò alcune porzioni di codice, introducendo un commento per illustrare la potenza di awk:

who | awk '{print $1, $4, $3}'

L’istruzione who visualizza gli utenti loggati, mentre il carattere pipe  concatena l’istruzione con awk. che si limita a stampare a video il primo argomento, poi il quarto e quindi il terzo dell’output prodotto da who.

L’ istruzione awk è composta sempre da due parti:

  1. la prima parte (opzionale) è un pattern da verificare. Se la verifica ha esito positivo, allora i risultati vengono processati.
  2. la seconda parte è racchiusa tra parentesi graffe e individua l’operazione da compiere.

Nel’istruzione precedente non esiste alcun pattern da verificare, quindi verranno stampati il primo, il quarto e il terzo argomento dei risultati dati dall’istruzione who.

Altre informazioni basilari nell’apprendimento di awk, sono le seguenti:

  1. l’argomento $0 indica l’intero record. Quindi senza specificare un pattern di verifica, awk risulta molto simile a grep.
  2. l’input elaborato da awk è una singola linea. Quindi a meno di specificare un carattere di separazione, per awk un record è dato da una linea.

Specificare il carattere di separazione

awk -F, '{print $1}' nomefile

Questa istruzione specifica il carattere di separazione di record con l’opzione -F seguito dal carattere (nel nostro caso, la virgola). Segue poi il campo da stampare (il primo) e il nome del file

Pattern di ricerca

ls -l | awk '$3 !~ /^root$/ {print $9, $1}'

In questo caso viene verificato un preciso pattern: viene analizzato il terzo campo di ogni riga ($3) e confrontato con il pattern root (si vedano le regex). Solo gli argomenti diversi da root verranno considerati corretti. Di questi si stamperà il nono e il primo campo.

Azione composte

awk '{out = ""; for (i = 1; i <= NF; i += 1) out = out $i "* "; print out }'

Quest’ultimo comanda aggiunge alcuni aspetti importanti:

  1. Il punto e virgola (;) permette di separa varie istruzioni consecutive, permettendo di realizzare costrutti più complessi
  2. NF individua il numero di campi in un record

In definitiva questo comando:

  1. definisce una variabile out
  2. un ciclo viene incrementato di 1 sino a quando non si raggiunge il numero di campi contenuti in un record
  3. si assegna alla variabile out il suo valore concatenato con il carattere *
  4. infine lo si stampa con il comando print

Awk è un tool estremamente complesso e duttile, e non sempre i suoi vantaggi sono tali da preferirlo a grep o cut.

cat nomefile | cut -d, -f 3-2-1

Con cat  viene letto un file e l’output reindirizzato su cut (che stampa alcune parti di una riga).

  1. il delimitatore dei campi viene impostato con -d (nel nostro caso  è la virgola)
  2. i campi da stampare vengono indicati facendoli precedere da -f

Schermi Virtuali

Una delle novità introdotte in Windows 10 ha riguardato la gestione degli schermi virtuali, ovvero quegli ambienti di lavoro configurabili con grande flessibilità da parte dell’utente. Poche persone li utilizzano, e questo è un peccato perché se sfruttati a dovere permettono di separare un ambiente con i programmi di lavoro, da quelli prettamente di svago e avere così più ordine sullo schermo (ridotto) del proprio portatile.

Ovviamente sulle distribuzioni Linux, i desktop virtuali esistono da svariati anni, e sono ampiamente configurabili per numero e tasti per accedervi.

Su Ubuntu è necessario innanzitutto abilitarli, andando su Impostazioni di sistema –> Aspetto e quindi scegliere  Comportamento e selezionare la casella Abilitare gli spazi di lavoro.

Ecco alcuni tasti utili:

  • Passare da uno schermo virtuale ad un altro: CTRL + ALT + FRECCE
  • Spostare il programma corrente in un altro schermo virtuale: SHIFT + CTRL + ALT + FRECCE

Queste e altre combinazioni di tasti sono personalizzabili andando sempre su Impostazioni di sistema –> Tastiera –> Scorciatoie –> Navigazione

Atom l’editor free

Atom è attualmente uno dee migliori editor disponibili, sono solo perché è free, multipiattaforma (Linux, OS X, Windows), ma soprattutto per la grande flessibilità e personalizzazione. In questo senso supera nettamente Sublime Text (altro stupendo editor che costa però 70 $), ma possiede anche dei peccati di gioventù come quello di divenire terribilmente lento con file dalle elevate dimensioni (parlo di migliaia di righe di codice).

Atom

 

Lettere accentate con una tastiera USA/EN (americana)

Spesso chi programma preferisce un layout americano per la propria tastiera, per via della migliore accessibilità a caratteri speciali come parentesi e apostrofi. Prima o poi però capiterà di scrivere un testo e di voler utilizzare velocemente anche le lettere accentate del proprio idioma. Le lettere apostrofate, insomma vanno bene per una email, meno per scrivere il proprio curriculum. A tal proposito qui elenco due sistemi (per Ubuntu 15.10) per scrivere velocemente le lettere accentate, senza cambiare il proprio layout americano.

  1. Utilizzare il layout “USA Internazionale”, conosciuto anche come “Inglese (USA Internazionale con tasti muti”. Il layout si aggiunge andando su Preferenze->Tastiera e quindi premendo sul link Inserimento testo. Ora basterà premere sul pulsante[+] e aggiungere il layout indicato. Ora per digitare le lettere accentate basterà premere l´accento desiderato più la lettera da accentare. I due accenti sono ` (che si alla sinistra del tasto 1) e  che invece si trova alla destra di ; (punto e virgola) Questo sistema è molto comodo tranne che per utilizzare gli apostrofi (utilizzati spesso in programmazione) .
  2. Questo sistema non necessita di impostare il layout “USA Internazionale” visto nel punto precedente. Questo sistema utilizza il tasto Compose che in Ubuntu è disabilitato di default. Andate su Preferenze->Tastiera e quindi premete sul link Inserimento testo e successivamente su Impostazioni della tastiera. Sotto il menu Scorciatoie–>Digitazione apparirà la voce Tasto Compose disabilitato: premete sulla parola Disabilitato e impostate il tasto speciale a voi più comodo (io utilizzo ALTGr). Ora per digitare una lettera accentata basterà premere: Tasto speciale impostato + lettera da accentate + apostrofo. Gli apostrofi sono gli stessi visti precedentemente. Questi sono ` (che si alla sinistra del tasto 1) e  che invece si trova alla destra di ; (punto e virgola)

Java 8 – Pellegrino Principe (prime impressioni)

Ogni anno Apogeo aggiorna la sua linea di prodotti editoriali proponendo delle revisioni più o meno corpose. Java 8 di Pellegrino Principe é una di queste, e fortunatamente si rivela un libro di discreta qualità.

Come è consuetudine nel panorama editoriale italiano, il libro si propone come una guida: completa – adatta ai neofiti – capace di affrontare tutti gli argomenti a 360 gradi – essere utile anche a chi ha maturato esperienza con il linguaggio.

Tutti buoni propositi, per carità, ma difficilmente gli autori ci hanno abituato a libri capaci di soddisfare tutte le promesse. Parlando specificatamente del libro in oggetto, e’ evidente sin dalle prime pagine come l’autore, che ha evidenti capacità e conoscenze nell’ambiente di sviluppo, cerchi di venire incontro verso chi muove i primi passi. I primi capitoli, in tal senso, sono capaci di chiarire i concetti della programmazione ad oggetti grazie ad un linguaggio chiaro, conciso e con buoni esempi di codice. Le cose si complicano nei capitoli più avanzati (dal capitolo 7 in poi) dove, se non si avranno compreso a menadito tutti i concetti OOP, sarà poi difficile avanzare con scioltezza. Probabilmente qualche pagina in più avrebbe aiutato i neofiti a destreggiarsi con concetti non proprio intuitivi come il binding dinamico, il poliformismo, le interfacce, ecc).

Sia chiaro, l’autore è un buon insegnante, ma come tanti altri autori italiani di altri testi simili, si “limita”, se così si può affermare, a dare la definizione di un concetto, illustrare qualche chiaro esempio, senza offrire quel qualcosa in più che potrebbe e dovrebbe rendere l´apprendimento più proficuo. Un esempio? Il concetto che illustra i modificatori di accesso di Java (public, protected, private) viene descritto sommariamente in una prima occasione, per poi essere approfondito nei vari paragrafi successivi, aspetto che non sempre agevola la comprensione di un concetto. Nel caso dei modificatori mi sono dovuto rivolgere alla pagina della documentazione ufficiale di Oracle per chiarirmi alcune perplessità:

  • i modificatori si dovrebbero illustrare parlando di Accesso e Visibilità
  • Un modificatore protected rende i membri di una classe accessibili ad una classe di un Package differente, basti che esista una relazione di ereditarietà

Il libro non soddisferà chi predilige i testi con una trattazione rigorosa e ben delineata. L’autore pur seguendo un ordine logico nei concetti esposti, spesso accenna a dei concetti importanti per poi approfondirli solo successivamente. Si tratta di uno stile, che ha i suoi vantaggi poiché facilità la trattazione di argomenti “pesanti”, ma che comunque potrebbe non soddisfare qualsiasi palato.

Ho apprezzato che in più occasioni venga riportato e spiegato il codice prodotto dal compilatore, aspetto che rende più chiaro il perché Java operi determinate scelte. Oltre ai diversi esempi, l’autore è infatti prodigo di consigli che palesano le proprie esperienze sul campo, anche se avrei preferito dei veri e propri capitoli dedicati al modo corretto di pensare secondo la programmazione ad oggetti. Come in tanti altri testi simili, si comprende, per esempio il concetto di classe astratta o interfaccia, senza però poi saperle impiegare nel modo corretto nei propri progetti, e perdendo cosi i vantaggi e le potenzialità che ne derivano. Si sente la mancanza di esempi che mediante “errori di progettazione” indotti permettano di abituarsi a pensare e lavorare secondo un modello OOP.  Un parere personale è che tanti libri rivolti ai neofiti si prodighino nel far apprendere la corretta sintassi di una istruzione, senza invece dare quei consigli pratici che indirizzino il lettore ad uno sviluppo corretto e produttivo in chiave OOP. Un esempio in tal senso è dato dalla pagina ufficiale di Oracle sui modificatori, menzionata poc’anzi, dove si leggono anche delle pratiche comuni, dettati dal buon senso e dal rispetto delle logiche OOP, ovvero:

  • Usare sempre i modificatori più restrittivi a meno che non ci sia un buon motivo per non farlo
  • Evitare di utilizzare i modificatori public per i campi se non si tratta di costanti

Si tratta di inezie, ma che secondo il sottoscritto, se implementate sistematicamente in ogni capitolo, magari affiancando lo sviluppo di un vero progetto, renderebbero Java 8 di Pellegrino Principe un manuale superiore a molti altri. Segnalo per finire, il sito ufficiale di Apogeo in cui scaricare l´indice del libro, gli esempi e un capitolo introduttivo e la pagina dell´autore che però non presenta, come talvolta accade, alcun approfondimento agli argomenti trattati.

Pagina dell´autore

Editore Apogeo