0

のようなN個の番号の2つのファイルが与えられた

file1

1 0.001
2 0.002
3 0.002
4 0.005
5 0.007
6 0.008
7 0.008
8 0.009
9 0.0010
0 0.011

file2はfile1のシャッフルバージョンです。

0 0.011
8 0.009
7 0.008
3 0.002
5 0.007
9 0.0010
1 0.001
4 0.005
2 0.002
6 0.008

2つの連続した番号の順序を数えたいのですが、この場合、file1.datの2番目の列に同じ2つの連続した番号がある場合(2-3と6-7の場合の場合)このように、file2.datを調べずに、反転を0.5として直接カウントします。この場合、結果は4回の反転になります。同様の質問(および回答)は、BASHの2番目のファイルでファイル内の2つの連続した番号の順序が逆になっている回数を数えることについて行われました。

4

1 に答える 1

1

私は2つのケースで行いましたが、必要なものを1つ選択してください。

これは0.5または1ケースの結果=4をカウントしています

kent$  awk  'FNR==NR{o[NR]=$1;next;}{v[$1]=FNR;m[$1]=$2;n=FNR}                               
        END{ for(i=1;i<=n-1;i++) { t+=m[o[i]]==m[o[i+1]]?0.5:v[o[i]]>v[o[i+1]]?1:0};                                                                                        
                print "invertions:"t;    
        }' f1 f2
invertions:4

これは、追加の0.5ケースの結果=6です。

kent$  awk  'FNR==NR{o[NR]=$1;next;}{v[$1]=FNR;m[$1]=$2;n=FNR}
        END{ for(i=1;i<=n-1;i++) {t1+=(v[o[i]]>v[o[i+1]])?1:0; t2+=m[o[i]]==m[o[i+1]]?0.5:0};
                print "invertions:"t1+t2;
        }' f1 f2
invertions:6
于 2013-02-08T10:14:04.577 に答える