2008-09-20 5 views
2

Existe-t-il un moyen facile de faire l'une des choses suivantes dans awk?tri des hachages/tableaux dans awk

  • Tri tableau/hachage par ses données
  • Tri un hachage par sa clé chaîne
+0

Voici un exemple d'un awk natif quicksort: http://en.literateprograms.org/Quicksort_(AWK) Désolé, ce site ne semble pas avoir des notifications ou j'aurais obtenu ce plus tôt. J'espère que tu le vois. – Chris

+0

http://www.netlib.org/research/awkbookcode/ch7 C'est un lien vers un tri d'insertion dans awk (et plus). – Chris

Répondre

3

Voici quelqu'un la réponse d'autre à un problème similaire: http://www.computing.net/answers/unix/urgent-help-with-sorting-in-awk/4442.html

qui est censé être quelque chose comme ceci:

gawk 'BEGIN {c=1} { array[c] = sprintf ("%s %s", $2, $1); c++ } 
END { asort(array); for (x=1;x<c;x++) { print array[x] } }' 

Notez que j'ai utilisé 'gawk'. Si vous voulez un tri intégré, utilisez gawk. Cet exemple prend une entrée 'espace-séparé' des paires de valeurs clés et les trie en fonction de la deuxième valeur (bien sûr, il les affiche en format valeur/clé, mais vous voyez ce que je fais là.) Pour faire cela à un tableau existant dans gawk, vous utiliseriez quelque chose de similaire. Si vous utilisez awk ou mawk, vous devrez utiliser l'une des nombreuses fonctions de tri disponibles dans les pages man pour effectuer le tri.

De l'gawk manpage: Tous les tableaux dans AWK sont associatifs, à savoir indexé par les valeurs de chaîne. L'opérateur spécial in peut être utilisé dans une instruction if ou while pour voir si un tableau a un indice composé d'une valeur particulière . if (val dans tableau) print array [val] Si le tableau contient plusieurs sous-scripts, utilisez (i, j) dans le tableau.

+0

Cela m'a pris un petit peu, j'ai déjà fait quelque chose comme ça, mais c'était il y a longtemps. Les parties amusantes seraient séparées par une regex, puis triées. – Chris

+0

merci. Malheureusement j'utilise nawk, qui n'a pas d'asort. – lamcro