La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

AWK Salvatore Campagna Politecnico di Torino Dipartimento di Automatica e Informatica.

Presentazioni simili


Presentazione sul tema: "AWK Salvatore Campagna Politecnico di Torino Dipartimento di Automatica e Informatica."— Transcript della presentazione:

1 AWK Salvatore Campagna 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 Si può passare in input anche un file che contiene pattern e azioni Awk [opzioni] –f Opzioni utili -v var=hello: definisce una variabile con il suo valore e lo passa allengine AWK

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

7 Pattern Un pattern può essere: 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: START: lazione associata viene eseguita prima di cominciare a processare la prima riga del file di input END: lazione 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 dellultimo 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: 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 dalli-esimo. Se n non cè dalli-esimo alla fine toupper(s), tolower(s) Ritornano la stringa s in maiuscolo o minuscolo

16 Gestione dellIO getline [var] [ 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 Lutilizzo 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

18 Funzioni definite dallutente 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 Politecnico di Torino Dipartimento di Automatica e Informatica."

Presentazioni simili


Annunci Google