1

序章

次の例を考えてみましょうsort.awk:

BEGIN {
    a[1]="5"; 
    a[2]="3";
    a[3]="6";

    asort(a)
    for (i=1; i<=3; i++) print a[i]
}

with で実行するとawk -f sort.awk、並べ替えられた数値が配列aに昇順で出力されます。

3
5
6

質問

対応する2 つの (そして一般的には のN) 配列ab

a[1]="5"; b[1]="fifth"
a[2]="3"; b[2]="third"
a[3]="6"; b[3]="sixth"

そして、すべての配列を「同時に」ソートする問題..これを達成するには、配列をソートするaだけでなく、ソートのインデックスを取得する必要があります。この単純なケースでは、インデックスは次のように与えられます。

ind[1]=2; ind[2]=1; ind[3]=3;

これらのインデックスがあれば、barray の並べ替えの結果に基づいて、並べ替えられた配列も出力できaます。例えば:

for (i=1;i<=3;i++) print a[ind[i]], b[ind[i]]

ソートされた配列を出力します..

AWK を使用した連想配列のソートも参照してください。

4

2 に答える 2

0

s answer に基づいてKent、インデックスも取得する必要があるソリューションを次に示します。

BEGIN {
    a[1]="5";
    a[2]="3";
    a[3]="6";

    for (i=1; i<=3; i++) b[i]=a[i]" "i
    asort(b)
    for (i=1; i<=3; i++) {
      split(b[i],c," ")
      ind[i]=c[2]
    }
    for (i=1; i<=3; i++) print ind[i]
}
于 2013-06-06T23:21:36.360 に答える