La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

AWK Salvatore Campagna

Presentazioni simili


Presentazione sul tema: "AWK Salvatore Campagna"— Transcript della presentazione:

1 AWK Salvatore Campagna Email: salvatore.campagna@polito.it
Politecnico di Torino Dipartimento di Automatica e Informatica

2 Introduzione Linguaggio di scripting parser scritto nel 1977 da:
A. V. Aho P. J. Weinberger B. W. Kernighan Sintassi simile al C Attenzione i vettori con indici numerici hanno indice che comincia da 1 ..

3 Documentazione Fare riferimento a MAN AWK (come sempre)
Risorsa web:

4 Funzionamento E’ un filtro
Si specifica un pattern per una riga e si esegue una azione se la riga rispetta il pattern Ogni file in input è diviso in record (line) Ogni record è diviso in campi (parole)

5 Riga di comando Si specificando pattern e azioni direttamente sulla shell awk [opzioni] ‘patter/azioni’ <file> Si può passare in input anche un file che contiene pattern e azioni Awk [opzioni] –f <script> <file> Opzioni utili -v var=hello: definisce una variabile con il suo valore e lo passa all’engine AWK

6 Comandi AWK Sono coppie patter/azione pattern { azione; }
Se manca l’azione di default awk visualizza in output la riga Se manca il pattern l’azione viese eseguita su ogni riga

7 Pattern Un pattern può essere: Esempi:
Una espressione regolare: /regexp/ Una espressione di confronto; Esempi: /^#/ $1 == ‘’prova’’ || $1 == ‘’PROVA’’ $1 ~ /^#/

8 Operatori di confronto
==, != >, <, >=, <= ~: match con espressione ! ~: no match con espressione Operatori logici && (and), || (or), ! (not)

9 Pattern predefiniti Esiston due pattern predefiniti: Esempi:
START: l’azione associata viene eseguita prima di cominciare a processare la prima riga del file di input END: l’azione associata viene eseguita dopo aver processato tutte le righe del file di input Esempi: BEGIN { FS=‘’:’’ } END { printf (‘’Risultato: %d\n’’, result); }

10 Variabili Non hanno tipo (il loro tipo dipende dal contesto)
Si usano come in C e non serve il simbolo $ Il $ serve a fare riferimento al campo i- esimo del record che è in fase di processamento I vettori sono associativi: indici sia numerici che letterali

11 Variabili predefinite
$0: tutto il record (linea) corrente $1, $2, ... $i ...: campo i-esimo del record corrente NF: numero di campi del record corrente $NF: il valore dell’ultimo campo FS: separatore di campi (default spazio) RS: separatore di record (line) (default ‘a capo’)

12 Array Sono delle mappe o hash table
Sono array associativi: indici sia numerici che letterali Multidimensionali: chiave di accesso combinazione degli indici Esempi: giorni[gennaio]=31 $1 ~ /^[0-9]/ { quant[$2,data]+=$1; } val[$1]=$2

13 Operare su array Costrutto if: Costrutto for: Costrutto delete:
if ( val in array ) { ... } Costrutto for: for ( val in array ) { ... } Costrutto delete: delete array delete array[index] Se si accede a un elemento inesistente viene restituito 0 o la stringa vuota a seconda del contesto

14 Operare con le stringhe
(string1 string2 string3 ...): concatenazione gsub(r, s[, t]); sostituisce le occorrenze di r con s in t (se t non c’è allora opera su $0) usare l’& per ottenere il valore del match Restituisce il numero di sostituzioni effettuate length(s) Restituisce la lunghezza della stringa match (s, r): restituisce la prima occorrenza di r in s

15 Operare con le stringhe
split (s, a [, d]) Suddivide s in parole rispetto al delimitatore d e mette il risultato nel vettore a Restituisce il numero di elementi in a Substr(s, i [, n]): Ritorna n caratteri di s a partire dall’i-esimo. Se n non c’è dall’i-esimo alla fine toupper(s), tolower(s) Ritornano la stringa s in maiuscolo o minuscolo

16 Gestione dell’IO getline [var] [<file] print str [> file ]
Legge il record seguente da file (o da file corrente) in var (o $0) print str [> file ] printf (format, ...) [> file ] Stampa su stdout o file. print non vuole le () e aggiunge newline system(command): chiama la shell per eseguire command exit: termina eseguendo il pattern END (se c’è)

17 Getline L’utilizzo tipico di getline è quello di leggere un secondo file (in più rispetto a quello che si sta leggendo) BEGIN { while getline < vocabolario.txt diz[$1]=$2 } { for(i=0; i<NF; i++){ if($i in diz) {printf(“%s”, diz[$i]);} else {printf(“%s”, $i);}

18 Funzioni definite dall’utente
Si possono definire funzioni Sintassi: function my_func (param1, param3, ,,,) { /*azioni*/ return val; } Uso della funzione: pattern { return_value=my_func(param1, param2, ...);


Scaricare ppt "AWK Salvatore Campagna"

Presentazioni simili


Annunci Google