GUIDA AD AWK, 02 – variabili predef

Le variabili predefinite

 

ALCUNE VARIABILI PREDEFINITE (BUILT-IN) DI AWK:
FS: fileds separator
OFS: output field separator (per print)
NR: number of rows
NF: number of fields
RS: record separator
ORS: output record separator (per print)
FILENAME: filename, naturalmente. Questa variabile è indefinita all’interno del blocco BEGIN e contiene “-” se non sono specificati file nella linea di comando.

Vediamo vari esempi in cui le variabili predefinite sono in azione:

Variabile FS e NR:

$ cat etc_passwd.awk
 BEGIN{
 FS=":";
 print "Name\tUserID\tGroupID\tHomeDirectory";
 }
 {
 print $1"\t"$3"\t"$4"\t"$6;
 }
 END {
 print NR,"Records Processed";
 }
$awk -f etc_passwd.awk /etc/passwd
 Name UserID GroupID HomeDirectory
 gnats 41 41 /var/lib/gnats
 libuuid 100 101 /var/lib/libuuid
 syslog 101 102 /home/syslog
 hplip 103 7 /var/run/hplip
 avahi 105 111 /var/run/avahi-daemon
 saned 110 116 /home/saned
 pulse 111 117 /var/run/pulse
 gdm 112 119 /var/lib/gdm
 8 Records Processed

Variabile OFS:

$ awk -F':' 'BEGIN{OFS="=";} {print $1,$6;}' /etc/passwd
 (...)
 avahi-autoipd=/var/lib/avahi-autoipd
 kernoops=/
 rtkit=/proc
 whoopsie=/nonexistent
 speech-dispatcher=/var/run/speech-dispatcher
 avahi=/var/run/avahi-daemon
 lightdm=/var/lib/lightdm
 pulse=/var/run/pulse
 hplip=/var/run/hplip
 colord=/var/lib/colord
 saned=/home/saned
 luca=/home/luca
 sshd=/var/run/sshd
 telnetd=/nonexistent
 testuser=/home/testuser
 gdm=/var/lib/gdm

Variabile RS:

$cat student.txt
Jones
2143
78
84
77

Gondrol
2321
56
58
45

RinRao
2122
38
37
65

Edwin
2537
78
67
45

Dayan
2415
30
47
20
$ vim student.awk
BEGIN {
RS="\n\n";
FS="\n";

}
{
print $1,$2;
}
$ awk -f student.awk student.txt
Jones 2143
Gondrol 2321
RinRao 2122
Edwin 2537
Dayan 2415

Awk ha letto i dettagli di ogni studente come singolo record, in quanto gli abbiamo settato RS=”\n\n”; -> il separatore di record è il doppio a capo (double new line)
FS=”\n”; -> il separatore di campo è l'”a capo” (newline)

Variabile ORS:

$cat student-marks
 Jones 2143 78 84 77
 Gondrol 2321 56 58 45
 RinRao 2122 38 37
 Edwin 2537 78 67 45
 Dayan 2415 30 47
$ awk 'BEGIN{ORS="=";} {print;}' student-marks
 Jones 2143 78 84 77=Gondrol 2321 56 58 45=RinRao 2122 38 37 65=Edwin 2537 78 67 45=Dayan 2415 30 47 20=

Variabile NR:

$ awk '{print "Processing Record - ",NR;}END {print NR, "Students Records are processed";}' student-marks
 Processing Record - 1
 Processing Record - 2
 Processing Record - 3
 Processing Record - 4
 Processing Record - 5
 5 Students Records are processed

Variabile NF:

$ awk '{print NR,"->",NF}' student-marks
 1 -> 5
 2 -> 5
 3 -> 4
 4 -> 5
 5 -> 4

Variabile FILENAME:

$ awk '{print FILENAME}' student-marks
 student-marks
 student-marks
 student-marks
 student-marks
 student-marks

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

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>