100 likes | 218 Views
Elaborazione delle tracce con AWK. Introduzione ad AWK. AWK è un linguaggio per la manipolazione di file di testo organizzati in righe e colonne Pertanto è particolarmente adatto ad elaborare i file di traccia prodotti da NS-2 È semplice da usare È interpretato Ha una sintassi simile al C.
E N D
Introduzione ad AWK • AWK è un linguaggio per la manipolazione di file di testo organizzati in righe e colonne • Pertanto è particolarmente adatto ad elaborare i file di traccia prodotti da NS-2 • È semplice da usare • È interpretato • Ha una sintassi simile al C
Struttura di uno script AWK • Uno script AWK è costituito da 3 blocchi (i blocchi vuoti possono essere omessi): BEGIN{ # Il primo blocco viene eseguito solo all’inizio dell’elaborazione del testo } { # Il secondo blocco è eseguito per ognuna delle righe del testo elaborato } END{ # Il terzo blocco è eseguito dopo l’ultima riga }
Esempio 1 BEGIN{ # inizializza contatore contaRighe=0; } { # per ogni riga elaborata incrementa contatore contaRighe++; } END{ #stampa contatore printf “%d\n”,contaRighe; } awk –f nomeFileScript.awk nomeFileTesto.txt
Lettura delle colonne di una riga • Durante l’esecuzione del blocco centrale, per ogni riga elaborata: • $0 contiene l’intera riga • $1 contiene la prima colonna • $2 contiene la seconda colonna • … • $10 decima colonna • …
Esempio 2 { #per ogni riga stampa l’elemento della 1a e della 5a colonna printf “%s %s\n”,$1,$5; }
Esempio 3 { # stampa solo le righe che in prima colonna contengono ABC if ( $1 ~ /ABC/ ) { printf “%s\n”,$0; } }
Esempio 4 { # stampa solo le righe che hanno la prima colonna uguale a ABC if ( $1 == “ABC” ) { printf “%s\n”,$0; } }
Esempio 1 con NS2 # Stampare l’istante di ricezione dei pacchetti e l’identificativo BEGIN{ printf “Istante\tPacchetto\n”; } { if ( ( $4 ~ /cbr/ ) && ( $1 ~ /r/ ) ) { printf “%e\t%d\n”,$2,$11; } } r 1.84471 2 1 cbr 210 ------- 1 3.0 1.0 195 600
Esempio 2 con NS2 # conta il numero di pacchetti scartati BEGIN{ scartati=0; } { if ( ( $4 ~ /cbr/ ) && ( $1 ~ /d/ ) ) { scartati++; } } END{ printf “%d\n”,scartati; } d 1.84609 2 3 cbr 210 ------- 0 0.0 3.1 225 610