1 / 18

Sistemi Operativi - Introduzione

Il sistema operativo UNIX AWK. Niccol ò Battezzati <niccolo.battezzati@polito.it> Politecnico di Torino Dip. Automatica e Informatica. 1. Sistemi Operativi - Introduzione. Introduzione. AWK e` un linguaggio di programmazione di parser inventato nel 1977 da : A. V. A ho

nickan
Download Presentation

Sistemi Operativi - Introduzione

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Il sistema operativo UNIX AWK Niccolò Battezzati<niccolo.battezzati@polito.it> Politecnico di Torino Dip. Automatica e Informatica 1 Sistemi Operativi - Introduzione

  2. Introduzione • AWK e` un linguaggiodiprogrammazionedi parser inventatonel 1977 da: • A. V. Aho • P. J. Weinberger • B. W. Kernighan • Sintassi simile al C, tranneche... ... l’indicedeivettori parte da 1!!! 2 Sistemi Operativi - Introduzione

  3. Introduzione • Dove sitrova la documentazione: • man awk • http://people.cs.uu.nl/piet/docs/nawk/nawk_toc.html 3 Sistemi Operativi - Introduzione

  4. Funzionamento • Si definiscono dei pattern e le rispettive azioni • per ogni linea del file di input che fa match con un determinato pattern, viene eseguita la rispettiva azione • il file di input e` diviso in record (“linee”) • e ogni record e` diviso in campi (“parole”). 4 Sistemi Operativi - Introduzione

  5. Funzionamento • Si puo` usare AWK sia dando i comandi direttamente da shell: • awk [options] ’commands’ input_f • sia usando un file di script: • awk [options] –f script_f input_f • opzioni utili: • -v var=val definisce una variabile var e le assegna il valore val 5 Sistemi Operativi - Introduzione

  6. Comandi • I comandi in AWK sono delle coppie pattern-azione: • pattern { • azione; • } • se un pattern non ha azione, AWK stampa ogni linea che fa match • se un’azione non ha pattern, viene eseguita per ciascuna linea del file. 6 Sistemi Operativi - Introduzione

  7. Pattern • I pattern possono essere: • /regexp/ espressioni regolari • relational_expr confronti • Esempi: • /^[Pp]ippo\>/ • $1 == “Pippo” || $1 == “pippo” • $1 ~ /[Pp]pippo\>/ 7 Sistemi Operativi - Introduzione

  8. Operatori di confronto • Operatori di confronto: • ==, != • <, >, <=, >= • ~ fa match con la regexp • !~ NON fa match con la regexp • &&, ||, ! operatori logici 8 Sistemi Operativi - Introduzione

  9. Pattern • Esistono due pattern predefiniti: • BEGIN eseguito prima di scorrere il file • END eseguito alla fine del file • Esempi: • BEGIN { FS=“:”;} • END {printf(“risultato = %d\n”,res);} 9 Sistemi Operativi - Introduzione

  10. Variabili • Le variabili non hanno tipo, possono essere considerate stringhe o numeri floating-point a seconda del contesto • si usano come in C, non serve il $ per farsi restituire il valore della variabile • l’operatore $ serve per farsi restituire il valore di un campo del record corrente o del record stesso • i vettori sono associativi, sono delle hash-table. 10 Sistemi Operativi - Introduzione

  11. Variabili predefinite • Variabili predefinite: • $0 il record corrente • $1,$2,... i campi del record corrente • NF numero di campi del record corrente • $NF l’ultimo campo del record corrente • FS il carattere separatore dei campi • RS il carattere separatore dei record 11 Sistemi Operativi - Introduzione

  12. Array • Gli array sono delle mappe che usano l’indice come chiave. L’indice puo` essere di qualsiasi tipo (numero o stringa) • gli array possono essere multidimensionali, la chiave e` una combinazione degli indici • Esempi: • giorni[“gennaio”] = 31; • $1 ~ /^[0-9]/ { quant[$2,data]+=$1;} 12 Sistemi Operativi - Introduzione

  13. Array • Ci sono alcuni costrutti e operatori utili per gli array: • if(val in array) {...} • if((val,val2) in array) {...} • for(var in array) {...} • delete array; • delete array[index]; • se si accede a un array con un indice inesistente viene ritornato 0 o la stringa vuota a seconda del contesto. 13 Sistemi Operativi - Introduzione

  14. Stringhe • Ci sono alcuni costrutti e funzioni utili per le stringhe: • (string1 string2 string3 ...) • Concatenazione di stringhe • gsub(r, s [, t]); • Sostituisce ogni occorrenza della regexp r con s nella stringa t (o $0 se non c’e` t). Un & in s viene sostituito con il valore che fa match. Ritorna il numero di sostituzioni. • length(s); • Ritorna la lunghezza della stringa s. • match(s, r); • Ritorna la prima occorrenza di una stringa che fa match con la regexp r nella stringa s. 14 Sistemi Operativi - Introduzione

  15. Stringhe • split(s, a [, d]); • Suddivide la stringa s in parole secondo il delimitatore d e mette nel vettore ogni elemento. Ritorna il numero di elementi del vettore a. • substr(s, i [, n]); • Ritorna al massimo n caratteri della stringa s a partire dal carattere i-esimo. Se n non c’e` ritorna tutto il resto della stringa a partire da i. • toupper(s); tolower(s); • Ritornano la stringa s trasformata in maiuscolo (o minuscolo). 15 Sistemi Operativi - Introduzione

  16. Gestione dell’I/O • Funzioni utili per una gestione avanzata dell’I/O: • getline [var] [<file]; • Carica il record seguente di file (o del file corrente) in var (o in $0). • print [str] [>file]; • printf(format, ...) [>file]; • Stampa (formattata) su file (se c’e` la redirezione). print stampa un newline alla fine e non vuole le parentesi. • system(command); • Chiama una shell per eseguire il comando command. • exit; • Va alla fine del file ed esegue il pattern END se c’e`. 16 Sistemi Operativi - Introduzione

  17. getline • L’utilizzo tipico di getline e` quello di leggere un secondo file di input prima della elaborazione: • BEGIN { • while(getline <vocabolario){ • voc[$1]=$2; • } • } • { • for(i=0; i<NF; i++){ • if($i in voc) {printf(“%s”, voc[$i]);} • else {printf(“%s”, $i);} • } • } 17 Sistemi Operativi - Introduzione

  18. Funzioni • In AWK si possono definire delle funzioni con la seguente sintassi: • function my_function(param1, param2 ...) • { • /*actions*/ • return val; • } • ... • pattern { • ret_val = my_function(param1, param2 ...); • } 18 Sistemi Operativi - Introduzione

More Related