Benvenuto Visitatore ( Log In | Registrati )
![]() ![]() |
28 Dec 2006, 10:01
Messaggio
#1
|
|
|
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 |
|
|
|
|
|
|
|
28 Dec 2006, 11:59
Messaggio
#2
|
|
|
Davvero ottimo, complimenti... alla terza puntata
-------------------- Regolamento di Tevac - Emanuele
|
|
|
|
|
28 Dec 2006, 12:51
Messaggio
#3
|
|
|
CITAZIONE(padreberta) Awk però è strettamente legato al concetto di espressione regolare.
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).
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. Ciao Paolo -------------------- |
|
|
|
|
8 Jan 2007, 11:51
Messaggio
#4
|
|
|
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..... 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 |
|
|
|
|
![]() ![]() |
| Titolo discussione | Risposte | Autore discussione | Visite | Ultima azione | |||
|---|---|---|---|---|---|---|---|
![]() |
4 | maxmm | 80 | 1 January 2009 - 14:10 Ultimo messaggio di: maxmm |
|||
![]() |
6 | Bhoo! | 133 | 28 November 2008 - 01:25 Ultimo messaggio di: Martini |
|||
![]() |
2 | Tevac | 147 | 26 November 2008 - 18:13 Ultimo messaggio di: Foenispro |
|||
![]() |
12 | olandesevolante84 | 192 | 26 November 2008 - 16:47 Ultimo messaggio di: cristianof |
|||
![]() |
12 | eugenio | 307 | 20 November 2008 - 12:49 Ultimo messaggio di: DaKaron |
|||
![]() |
0 | TevacPhoto | 38 | 31 October 2008 - 18:02 Ultimo messaggio di: TevacPhoto |
|||
![]() |
0 | TevacPhoto | 35 | 30 October 2008 - 17:50 Ultimo messaggio di: TevacPhoto |
|||
![]() |
19 | pieffe60 | 256 | 9 October 2008 - 15:57 Ultimo messaggio di: glauco |
|||
![]() |
5 | LucioT | 154 | 5 October 2008 - 19:50 Ultimo messaggio di: LucioT |
|||
![]() |
3 | hal 9000 | 137 | 2 October 2008 - 12:35 Ultimo messaggio di: Bhoo! |
|||
![]() |
10 | Bakko | 206 | 12 September 2008 - 09:24 Ultimo messaggio di: Martini |
|||
![]() |
0 | TevacPhoto | 61 | 5 September 2008 - 21:38 Ultimo messaggio di: TevacPhoto |
|||
|
Versione Lo-Fi | Oggi è il: 8 January 2009 - 15:05 |
| IP.Board Skin Developed By Creative Networks | ||