awkでページランク

awkページランクの計算。

1 3
2 5
3 6
4 7

というリストデータに対して、

$ cat gai3.awk
{

        m[$2"a"$1]=1;


}
END{




        c=0.85
        for(i in m){
                split(i,n,"a")
                Sum[n[2]]=1+Sum[n[2]];

        }






        for( i in m){

                split(i,n,"a")
                h[i]=-c*(m[i]/Sum[n[2]]);

                #print n[1],n[2],h[i]
        }

        n123=0;
        for(i in Sum){
                n123=n123+1;
        }
        n123=n123+0.0;
        print n123;
        p_N=1.0/n123
        for( i in Sum){

                y[i]=p_N;

        }
        usiro=1;
        mae=100;
        while(sqrt((usiro-mae)^2)/sqrt(((usiro+mae)/2.0)^2)>=0.001){

                for(i in h){
                        split(i,out,"a");
                                l[out[1]]=l[out[1]]+h[i]*y[out[2]];


                }

                mae=suml;
                suml=0;
                for(i in y){
                        x[i]=(p_N-l[i]);
                        y[i]=x[i]

                        suml=suml+ y[i];

                        delete l[i]
                }

                usiro=suml;
                print suml;
        }

        for(i in Sum){
                Sum2=Sum2+y[i];

        }
        print "end"
        for(i in Sum){

                print i,y[i]/Sum2;
        }