-------------------------------------------------- addrs.awk -------------------------------------------------- BEGIN { RS = "" ; FS = "\n" } { print "Name is:", $1 print "Address is:", $2 print "City and State are:", $3 print "" } -------------------------------------------------- adds.dat -------------------------------------------------- Anna Bianchi via Ulzio 31 Collegno (TO) Ugo Rossi corso Risorgimento 38 Asti (AT) -------------------------------------------------- change.awk -------------------------------------------------- { $3=$1 $1 = $3 - $2 print $1, $2, $3 } -------------------------------------------------- change.dat -------------------------------------------------- 10 2 8 2 7 3 -------------------------------------------------- convert.awk -------------------------------------------------- # utilizza un field separator diverso dallo spazio # e lavora su record divisi su piu` linee, infatti # il record separator e` la linea vuota # NR e` il numero del record a cui il sistema e` # arrivato, viene incrementato automaticamente BEGIN {RS=""; FS=":"} NR==1 {print "dataset: ", $0} NR>1 { i=1 somma = 0; print "\ninizio record" while (i <= NF) { print "campo" i "-mo: " $i i = i+1 somma += $i } $(i) = somma print "totale -> ", $i, i } END {print "Fine conversione"} -------------------------------------------------- es_array1.awk -------------------------------------------------- BEGIN { # inizializza un array used[0]="pippo" used[1]="paperino" used[2]="topolino" } $1 ~ /go/ { # quando trovi la parola go, # stampa l'array for (i in used) print i, used[i] } -------------------------------------------------- es_array1.dat -------------------------------------------------- go -------------------------------------------------- funz.awk (da usare con nawk) -------------------------------------------------- # funzione d'errore function myerror(numrec, msg) { print "errore alla linea ", numrec, "::", msg } # elenco di casi di errore e stampa di messaggio $1 > 0 { myerror(NR, "il primo valore deve essere negativo o 0") } $2 < 0 { myerror(NR, "il secondo valore deve essere positivo o 0") } END {print "fine elaborazione"} -------------------------------------------------- funz.dat -------------------------------------------------- 1 -2 -------------------------------------------------- nofunz.awk -------------------------------------------------- # caso analogo al precedente senza la funzione di errore ($1 > 0) { # si noti il backslash: non si potrebbe andare # a capo a meta` di un comando, tuttavia, usando # \ si esegue l'escape del carattere di return # in altri termini il return viene ignorato # dall'interprete print "errore alla linea ", NR, "::", \ "il primo valore deve essere negativo o 0" } ($2 < 0) { print "errore alla linea ", NR, "::", \ "il secondo valore deve essere positivo o 0" } -------------------------------------------------- on_more_lines.awk -------------------------------------------------- # per gestire record divisi su piu` linee # occorre indicare che il record separator # e` la stringa vuota BEGIN {RS=""} # per ogni record, lo stampo {print "inizio record:: ",$0," ::fine record"} -------------------------------------------------- on_more_lines.dat -------------------------------------------------- aaa bbb ccc ddd fff ggg hhh iii ll mmm -------------------------------------------------- to_convert.dat (dati usati da convert.awk) -------------------------------------------------- ORIGIN 1/12:38 12:333:454:51 11:34 16:28::454 11:34 --------------------------------------------------