sistemi operativi - introduzione
DESCRIPTION
Il sistema operativo UNIX AWK. Niccol ò Battezzati 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 - PowerPoint PPT PresentationTRANSCRIPT
Sistemi Operativi - Introduzione1
Il sistema operativo UNIXAWK
Niccolò Battezzati <[email protected]>
Politecnico di Torino
Dip. Automatica e Informatica
Sistemi Operativi - Introduzione2
Introduzione
Sistemi Operativi - Introduzione3
Introduzione
Sistemi Operativi - Introduzione4
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”).
Sistemi Operativi - Introduzione5
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
Sistemi Operativi - Introduzione6
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.
Sistemi Operativi - Introduzione7
Pattern• I pattern possono essere:
• /regexp/ espressioni regolari• relational_expr confronti
Esempi:• /^[Pp]ippo\>/• $1 == “Pippo” || $1 == “pippo”• $1 ~ /[Pp]pippo\>/
Sistemi Operativi - Introduzione8
Operatori di confronto
• Operatori di confronto: • ==, !=• <, >, <=, >=• ~ fa match con la regexp• !~ NON fa match con la regexp• &&, ||, ! operatori logici
Sistemi Operativi - Introduzione9
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);}
Sistemi Operativi - Introduzione10
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.
Sistemi Operativi - Introduzione11
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
Sistemi Operativi - Introduzione12
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;}
Sistemi Operativi - Introduzione13
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.
Sistemi Operativi - Introduzione14
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.
Sistemi Operativi - Introduzione15
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).
Sistemi Operativi - Introduzione16
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`.
Sistemi Operativi - Introduzione17
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);}
}
}
Sistemi Operativi - Introduzione18
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 ...);
}