2013-04-18 10 views
5

Przeszukałem go i przekonałem się, że po AWK 4.0 możemy wydrukować tablicę w określonej kolejności, umieszczając PROCINFO ["sorted_in"] komendę przed pętlą. Na przykład:Jak wydrukować tablicę w określonej kolejności w AWK 3.1.3

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

W AWK 4.0.2 działa. Jednak próbowałem go w środowisku AWK 3.1.3, to nie działało. Czy ta wczesna wersja AWK nie obsługuje tej funkcji? Jak osiągnąć ten cel w AWK 3.1.3?

+0

sprawdź asortyment/asorti do sortowania tablic – Laurijssen

+0

Nie, nie-GNU awks i starsze wersje gawk nie obsługują tej funkcji. Wyjaśnij "zdefiniowaną kolejność" i "ten cel". Czy chcesz wydrukować tablicę w określonej kolejności, a jeśli tak, to jaka jest kolejność (sortowanie w pierwszej kolejności lub liczbowej lub alfabetycznej lub ...)? Alternatywnie szukasz mechanizmu do definiowania różnych rzędów tablic drukujących, tak jak pokazujesz w swoim przykładzie, wypełniając PROCINFO []? –

Odpowiedz

4

Po prostu zachowaj drugą tablicę order z indeksami numerycznymi i kluczami dla pierwszej tablicy jako wartości. Następnie można wykonać iterację order w sekwencji i spojrzeć w górę wartości array:

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

Przy budowie order, może chcesz sprawdzić, czy klucz jest już obecny w array, aby zapobiec klucze array pokazano wielokrotny czasy.

+0

Nie ma funkcji "długość" w 3.1.3. Zobacz funkcję pana Ventimiglia (z moim ekstensión) na http://stackoverflow.com/questions/9351902/how-can-i-get-the-length-of- an-tablica-w-awk/19411381 # 19411381 lub po prostu zatrzymaj ostatni indeks użyty przy tworzeniu "zamówienia". –

Powiązane problemy