venerdì 28 dicembre 2012

Un po' di AWK. Quattordicesima parte

In questo post avrei dovuto continuare con gli arrays, solo che mi sono ricordato di non aver parlato della differenza tra NR e FNR. E siccome  devo fare qualche esempio usando queste due variabili predefinite di AWK, mi tocca fare qualche passo indietro.

Apparentemente NR e FNR fanno la stessa cosa: contano il numero dei records. Tuttavia la differenza tra le due variabili built-in è sostanziale.

Cerchiamo di coglierla con qualche esempio.

Partiamo dalla classica tabella (tab1.txt)
Luigi Marco Luisa Ennio
Nino Patrizio Ada Mirco
Franco Luca Andrea Ugo
Letizia Barbara Giorgo
Lucia Vincenzo Ettore


awk 'BEGIN{print "\n"}{print "FNR: " FNR, " " "NR: " NR, $0 }END{print "\n"}' tab1.txt
Fin qui niente di particolare.

Ma se gli passiamo due file...

Prepariamo un'altra tabella (tab2.txt)
a5 b6 c7 d8
e8 f9 g1 h2
i3 l4 m5 n6
o7 p8 q9 r1


awk  'BEGIN{print "\n"}{print "FNR: " FNR, " " "NR: " NR, $0 }END{print "\n"}' tab1.txt tab2.txt

Notate qualcosa di strano? Bene!

Possiamo perciò concludere dicendo che sia NR che FNR contano i numeri di records; tuttavia, mentre NR somma i records del primo file con quelli del secondo, FNR, finiti i records del primo file, inizia a ricontare quelli del secondo. La prossima volta, è probabile già domani, potrò finalmente parlare di cose più toste. E si ritorna così agli arrays. :)

Vi ricordo che l'indice del sequel "Un po' di AWK" lo trovate qui. Vi consiglio di dare un'occhiata anche all'indice di "Brevi Esercizi".

Alla prossima!

Nessun commento:

Posta un commento