2013-04-18 10 views
5

L'ho cercato e trovato che dopo AWK 4.0 è possibile stampare un array in ordine definito inserendo il comando PROCINFO ["sorted_in"] prima del ciclo. Ad esempioCome stampare un array nell'ordine definito in AWK 3.1.3

PROCINFO["sorted_in"] = "@ind_num_asc" 
    for(i in array) 
      print i, array[i] 

In AWK 4.0.2, funziona. Tuttavia, l'ho provato in ambiente AWK 3.1.3, non ha funzionato. Questa versione iniziale di AWK non supporta questa funzione? Come raggiungere questo obiettivo in AWK 3.1.3?

+0

check asort/asorti per l'ordinamento di un array – Laurijssen

+0

No, gli awk non GNU e le versioni precedenti di gawk non supportano questa funzionalità. Chiarire "ordine definito" e "questo obiettivo". Stai cercando di stampare una matrice in un ordine specifico e, in tal caso, qual è l'ordine (in ordine numerico o in ordine alfabetico o ...)? In alternativa, stai cercando un meccanismo per definire diversi ordini di array di stampa come mostrato nel tuo esempio popolando PROCINFO []? –

risposta

4

Basta mantenere un secondo array order con indici numerici e le chiavi per il primo array come valori. È quindi possibile scorrere order in sequenza e cercare i valori di array:

for (i = 1; i < length(order); i++) { 
    print order[i], array[order[i]] 
} 

Quando si costruisce order, si consiglia di verificare se la chiave è già presente in array, per evitare che le chiavi del array viene mostrato multipla volte.

+0

Non c'è la funzione "lunghezza" in 3.1.3. Vedere la funzione di Mr. Ventimiglia (con la mia estensione) su http://stackoverflow.com/questions/9351902/how-can-i-get-the-length-of- an-array-in-awk/19411381 # 19411381 o semplicemente mantenere l'ultimo indice utilizzato nella creazione di "ordine". –

Problemi correlati