GUIDA AD AWK, 04 – variabili

Settare variabili in awk e scambiarle con la shell

# Per assegnare un valore ad una variabile utilizziamo l'opzione -v:
 $ echo 7 | awk -v var2=6 -v var3=5 '{print $0+var2+var3}'
 18
# Per passare una variabile ad awk, utilizziamo una sintassi molto simile:
 # Esempio:
 $ x=7
 $ echo 10 | awk -v val=$x '{print $0+val}'
 17i

La variabile $x è stata passata alla variabile awk “val” e come tale può essere utilizzata da awk.

Un altro modo per ottenere lo stesso risultato:

$ echo 10 | awk '{print $0 " " val}' val=$y
 10 9

Se vogliamo invece avere accesso in awk alle variabili d’ambiente (in questo caso “USER”), utilizziamo la speciale variabile “ENVIRON” con la sintassi seguente:

$ echo 10 | awk '{print $0,ENVIRON["USER"]}' OFS=,
 10,luca

Se vogliamo quotare i campi di un file di testo:

$ echo -e "pippo\n \bpluto\n \bpaperino"
pippo
pluto
paperino
$ echo -e "pippo\n \bpluto\n \bpaperino" | awk -v apice="'" '{print apice $0 apice }'
 'pippo'
 'pluto'
 'paperino'
# Similmente a quanto visto prima:
 $ echo -e "pippo\n \bpluto\n \bpaperino" | awk '{print q $0 q}' q='"'
 "pippo"
 "pluto"
 "paperino"

Per passare una variabile da awk alla shell:

$ cat file7
 pippo 50
 pluto 100
 paperino 150
 minnie 200
$ b=`awk '/pippo/{print $2}' file7`
 $ echo $b
 50

Per passare più variabili awk alla shell:

$ all=`awk '{if($1=="paperino") {first=$2; print "first="first}; if($1=="minnie") {second=$2; print "second="second}}' file7`
 $ echo $all
 first=150 second=200
 $ eval $all
 $ echo $first
 150
 $ echo $second
 200

Il comando è abbastanza autoesplicativo. Notare che il comando “eval” esegue i comandi contenuti all’interno della variabile. Nel nostro caso setta le variabili $first e $second

Forse si preferisce utilizzare il metodo “source”:

$ awk '{if($1=="paperino") {xxx=$2; print "xxx="xxx}; if($1=="minnie") {yyy=$2; print "yyy="yyy}}' file7 > container
 $ cat container
 xxx=150
 yyy=200
 $ echo $xxx
$ echo $yyy
$ source container
 $ echo $xxx
 150
 $ echo $yyy
 200

————————————

INDICE

Lascia una risposta

L'indirizzo email non verrà pubblicato. I campi obbligatori sono contrassegnati *

È possibile utilizzare questi tag ed attributi XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>