Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di...

18
Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati <[email protected]> Politecnico di Torino Dip. Automatica e Informatica

Transcript of Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di...

Page 1: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Introduzione1

Il sistema operativo UNIXAWK

Niccolò Battezzati <[email protected]>

Politecnico di Torino

Dip. Automatica e Informatica

Page 2: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Introduzione2

Introduzione

Page 3: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Introduzione3

Introduzione

Page 4: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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”).

Page 5: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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

Page 6: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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.

Page 7: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Introduzione7

Pattern• I pattern possono essere:

• /regexp/ espressioni regolari• relational_expr confronti

Esempi:• /^[Pp]ippo\>/• $1 == “Pippo” || $1 == “pippo”• $1 ~ /[Pp]pippo\>/

Page 8: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

Sistemi Operativi - Introduzione8

Operatori di confronto

• Operatori di confronto: • ==, !=• <, >, <=, >=• ~ fa match con la regexp• !~ NON fa match con la regexp• &&, ||, ! operatori logici

Page 9: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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);}

Page 10: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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.

Page 11: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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

Page 12: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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;}

Page 13: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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.

Page 14: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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.

Page 15: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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).

Page 16: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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`.

Page 17: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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);}

}

}

Page 18: Sistemi Operativi - Introduzione 1 Il sistema operativo UNIX AWK Niccolò Battezzati Politecnico di Torino Dip. Automatica e Informatica.

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 ...);

}