IPB     Il futuro di Tevac dipende da te!  

Benvenuto Visitatore ( Log In | Registrati )

  · · · · · · · · · · · ·
Reply to this topicStart new topic
> awk - molto piu' che un manipolatore di output - parte 2
padreberta
messaggio 28 Dec 2006, 10:01
Messaggio #1


Level 4/11
****

Gruppo: Forum User +
Messaggi: 423
Iscritto il: 6-July 04
Da: into the bit
Utente Nr.: 2.098



NdPoweruser: Continua dalla prima parte

Come si dice.. in ferie si ha più tempo.. peccato che io sia al lavoro anche oggi.
Il clima è però decisamente tranquillo, quindi vi lascio alla seconda parte di questo excursus su awk.

Abbiamo visto un semplice utilizzo di awk nel formattare un output come piu' ci piaceva.
Awk però è strettamente legato al concetto di espressione regolare.
Solo sulle espressioni regolari ci sarebbe da scrivere più di un libro, mi è quindi un po' difficile aprire una parentesi così ampia. Tirerò fuori dal cappello solo quello che serve, altre considerazioni sulle regular expression le facciamo in un altro topic.
Cosa è quindi una espressione regolare ?
La REGular EXpression (regex) è una vera e propria sintassi attraverso la quale è possibile rappresentare insiemi di stringhe. Il comando che più rappresenta l'uso massivo di regex è grep (Global REgular exPression).
Le regular expressions sono entrate sempre di più in uso sui sistemi unix, fino all'implementazione nel perl...lì è stato il finimondo, e il perl è diventato il linguaggio degli amministratori di sistema.
Comunque.
grep è un comando che ricerca insiemi di stringhe.
esempio terra terra.
trovare nella cartella home, tutte le cartelle che iniziano con "P"
CODICE
ls | grep P

Ho cercato un insieme di stringhe "P" all'interno dell'output prodotto da ls
Ovviamente le regular expression permettono di fare molto di più.
Per esempio.. ho un file di 3000 righe con dentro.. che so.. tutti gli accessi ad un determinato sistema.
Sto per dare in pasto questo file ad un database e mi accorgo che c'è un campo data che è formattato dd-mm-yyyy
e io ho bisogno che sia yyyy/dd/mm
Ovvio che non posso farlo con un banale "Trova e sostituisci" ho bisogno di uno strumento più potente.
E qui mi aiutano le regex.
Ometto il codice per evitare confusione.
Vabbè awk ha di queste potenzialità.
Per esempio.
Ho un file che è costruito così e si chiama giorni_ferie.txt
CODICE
modalità    giorni    periodo    dove
ferie    2    estate    mare
ferie    4    autunno    montagna
lavoro    300    inverno    ufficio
ferie    6    primavera    casa
ferie    15    estate    mare
ferie 10    primavera    mare

Ok.
Voglio vedere solo quando lavoro
CODICE
awk '/lavoro/' giorni_ferie.txt

il risultato sarà
CODICE
lavoro    300    inverno    ufficio

Ho cercato l'insieme di stringhe /lavoro/ all'interno di un file.
Bene.
Un po' più complicato.
Voglio vedere solo quando solo in ferie
CODICE
awk '/ferie/' giorni_ferie.txt

l'output è
CODICE
ferie    2    estate    mare
ferie    4    autunno    montagna
ferie    6    primavera    casa
ferie    15    estate    mare
ferie 10    primavera    mare

ora, voglio solo vedere quando vado in ferie, in che periodo e dove, quindi assemblo una richiesta con awk
CODICE
awk '/ferie/ {print $3,$4}' giorni_ferie.txt

bene, ora voglio che mi faccia vedere solo i giorni di ferie superiori o uguali a 10, quando e dove andrò
CODICE
awk '/ferie/ {if ($2 >= 10) print $3,$4}' giorni_ferie.txt

ok, abbiamo inserito anche una condizione.
riepiloghiamo
awk ,cerca in TUTTE le righe dell'input e effettua le azioni che gli vengono passate.
awk , cerca in tutte le righe, quelle che hanno "ferie", controlla che nel secondo campo variabile ci siano certi dati, e stampa quello che viene richiesto. La cosa abbastanza logica che ci viene in mente è che quindi awk è in grado di effettuare confronti matematici.
Ps. per chi programma in C gli operatori sono gli stessi.

Ah,
un 'altra cosa che non ho detto.
La ricerca è racchiusa sempre tra slash "/", e awk di suo ricerca in case-sensitive.
Altre espressioni abbastanza scoccianti
uso sempre il nostro esempio
/ferie/ -- trova tutte le linee che contengono "ferie"
/^ferie/ -- trova tutte le linee che iniziano con "ferie"
/$ferie/ -- trova tutte le linee che terminano con "ferie"
/[Ff]erie/ -- specifico all'interno di parentesi quadre la possibilità che sussistano 2 caratteri diversi
/[a-z]/ -- trova tutte le linee che hanno caratteri nell'intervallo dalla "a" alla "z"
/(estate) | (inverno)/ --trova tutte le linee che contengono "estate" O "inverno" ( il pipe qui fa da or)

Bon.
Qui ho messo un sacco di carne al fuoco, mi rendo conto.
Ma avremo modo di approfondire ampiamente tutte queste cose.

Mi raccomando correggete se trovate errori


--------------------
Gates 1994:
- There is no need for Microsoft to support TCP/IP
Gates 1995:
- Microsoft has invented a new protocol. We're calling it TCP/IP
Go to the top of the page
 
+Quote Post
EnErGy
messaggio 28 Dec 2006, 11:59
Messaggio #2


Level 3/11
***

Gruppo: Forum User +
Messaggi: 224
Iscritto il: 1-September 04
Da: Lugano - Svizzera
Utente Nr.: 2.259



Davvero ottimo, complimenti... alla terza puntata icon_lol.gif


--------------------
Go to the top of the page
 
+Quote Post
poweruser
messaggio 28 Dec 2006, 12:51
Messaggio #3


MacInATopic
Gruppo icone

Gruppo: Team Moderatori
Messaggi: 24.319
Iscritto il: 27-July 03
Da: Maglie (LE)
Utente Nr.: 440



CITAZIONE(padreberta)
Awk però è strettamente legato al concetto di espressione regolare.
Solo sulle espressioni regolari ci sarebbe da scrivere più di un libro, mi è quindi un po' difficile aprire una parentesi così ampia. Tirerò fuori dal cappello solo quello che serve, altre considerazioni sulle regular expression le facciamo in un altro topic.
Cosa è quindi una espressione regolare ?
La REGular EXpression (regex) è una vera e propria sintassi attraverso la quale è possibile rappresentare insiemi di stringhe. Il comando che più rappresenta l'uso massivo di regex è grep (Global REgular exPression).
Le regular expressions sono entrate sempre di più in uso sui sistemi unix, fino all'implementazione nel perl...lì è stato il finimondo, e il perl è diventato il linguaggio degli amministratori di sistema.
Le espressioni regolari sono state trattate anche nel corso sul Perl di Marco Coïsson. (Capitoli 4.http://www.tevac.com/article.php/200511220758598,1,2,3,4).

Ciao
Paolo


--------------------
Paolo Portaluri

guru, n: A computer owner who can read the manual.
Go to the top of the page
 
+Quote Post
fede_dev
messaggio 8 Jan 2007, 11:51
Messaggio #4


macaddict
*******

Gruppo: Team Moderatori
Messaggi: 2.343
Iscritto il: 16-June 04
Da: bologna
Utente Nr.: 2.026



padreberta,
...ottimo lavoro, se sei d'accordo creo un capoverso e lo integro nella faq (segnalandone la paternità ..of course).

Quando riesco posto qualcosa di inerente per allargare il discorso..... oggi è un delirio e non riesco a fare nulla..... icon_cry.gif

Aspetto un tuo ok per l'inserimento nella faq.

Per quanto riguarda i tuoi contributi sei il benvenuto, qua tra appassionati di sistemi, unix-addict e developer sei a casa tua, perciò scrivi senza remore l'interesse c'è.

saluti
fede


--------------------
- 1st don't waver... (© woz)
- Atletico tevac '80- apple way as a feet view © fede_dev
- enigmatico
- supporta zio pino & tevac
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic

 

Collapse

> 

    Titolo discussione Risposte Autore discussione Visite Ultima azione
No New Posts   4 maxmm 80 1 January 2009 - 14:10
Ultimo messaggio di: maxmm
No New Posts   6 Bhoo! 133 28 November 2008 - 01:25
Ultimo messaggio di: Martini
No New Posts   2 Tevac 147 26 November 2008 - 18:13
Ultimo messaggio di: Foenispro
No new   12 olandesevolante84 192 26 November 2008 - 16:47
Ultimo messaggio di: cristianof
No new   12 eugenio 307 20 November 2008 - 12:49
Ultimo messaggio di: DaKaron
No New Posts   0 TevacPhoto 38 31 October 2008 - 18:02
Ultimo messaggio di: TevacPhoto
No New Posts   0 TevacPhoto 35 30 October 2008 - 17:50
Ultimo messaggio di: TevacPhoto
No new   19 pieffe60 256 9 October 2008 - 15:57
Ultimo messaggio di: glauco
No New Posts   5 LucioT 154 5 October 2008 - 19:50
Ultimo messaggio di: LucioT
No New Posts   3 hal 9000 137 2 October 2008 - 12:35
Ultimo messaggio di: Bhoo!
No new   10 Bakko 206 12 September 2008 - 09:24
Ultimo messaggio di: Martini
No New Posts   0 TevacPhoto 61 5 September 2008 - 21:38
Ultimo messaggio di: TevacPhoto

Modalità di visualizzazione: Normale · Passa a: Lineare · Passa a: Outline


RSS Versione Lo-Fi Oggi è il: 8 January 2009 - 15:05
IP.Board Skin Developed By Creative Networks