1

私は次の状況にあります:

nubmbersのみを含む1列のデータのファイルがあります。それを呼びましょうfile.dat

次に、このファイルをシャッフルする必要があります。そのために、ターミナルに次のコードを記述しますshufl file1.dat > shuffle.datfile1.dat次に、から2つの連続する番号の順序がで変更された回数を数えたいと思いますshuffle.dat。コードを使用しました

awk -F, 'FNR==NR{o[NR]=$0;next;}{v[$0]=FNR;n=FNR}
    END{ for(i=1;i<=n-1;i++) t+=v[o[i]]>v[o[i+1]]?1:0;
            print t;
    }' file.dat shuffle.dat

この操作を10,000回繰り返し、結果をファイルに収集する必要がありますresult.dat。明らかに、端末でそれを行うことは、時間の理由から考えられません。awkスクリプトを記述して、操作を10,000回繰り返し、結果を出力ファイルに書き込むことは可能ですresult.datか?はいの場合、ターミナルごとにスクリプトを実行する方法と方法を教えてください。

4

1 に答える 1

2

A simple bash script will achieve this:

echo 'FNR==NR{o[NR]=$0;next;}{v[$0]=FNR;n=FNR}
     END{for(i=1;i<=n-1;i++) t+=v[o[i]]>v[o[i+1]]?1:0;
     print t;
     }' > script.awk

touch result.dat

for i in {1..10000}; do
    echo 'shuffling file...'
    shuf file.dat > shuf.dat
    echo 'counting inversions...'
    awk -F, -f script.awk file.dat shuf.dat >> result.dat
done
于 2013-01-19T15:34:42.853 に答える