Successivo: , Precedente: , Su: Fondamenti sui vettori   [Contenuti][Indice]


8.1.4 Esempio semplice di vettore

Il seguente programma prende una lista di righe, ognuna delle quali inizia con un numero di riga, e le stampa in ordine di numero di riga. I numeri di riga non sono ordinati al momento della lettura, ma sono invece in ordine sparso. Questo programma ordina le righe mediante la creazione di un vettore che usa i numeri di riga come indici. Il programma stampa poi le righe ordinate secondo il loro numero. È un programma molto semplice e non è in grado di gestire numeri ripetuti, salti di riga o righe che non iniziano con un numero:

{
    if ($1 > massimo)
        massimo = $1
    vett[$1] = $0
}

END {
    for (x = 1; x <= massimo; x++)
        print vett[x]
}

La prima regola tiene traccia del numero di riga più grande visto durante la lettura; memorizza anche ogni riga nel vettore vett, usando come indice il numero di riga. La seconda regola viene eseguita dopo che è stato letto tutto l’input, per stampare tutte le righe. Quando questo programma viene eseguito col seguente input:

5  Io sono l'uomo Cinque
2  Chi sei?  Il nuovo numero due!
4  . . . E quattro a terra
1  Chi è il numero uno?
3  Sei il tre.

Il suo output è:

1  Chi è il numero uno?
2  Chi sei?  Il nuovo numero due!
3  Sei il tre.
4  . . . E quattro a terra
5  Io sono l'uomo Cinque

Se un numero di riga appare più di una volta, l’ultima riga con quel dato numero prevale sulle altre. Le righe non presenti nel vettore si possono saltare con un semplice perfezionamento della regola END del programma, in questo modo:

END {
    for (x = 1; x <= massimo; x++)
        if (x in vett)
            print vett[x]
}

Successivo: , Precedente: , Su: Fondamenti sui vettori   [Contenuti][Indice]