如何编写完整的awk脚本

时间:2013-01-19 15:17:56

标签: bash awk

我遇到以下情况:

我有一个只包含nubmbers的1列数据的文件。我们称之为file.dat

然后我要对这个文件进行洗牌,为此,我在终端中写下以下代码shufl file1.dat > shuffle.dat。然后我想计算在file1.dat中修改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?如果是,我可以如何以及如何通过终端运行脚本?

1 个答案:

答案 0 :(得分:2)

一个简单的bash脚本将实现这一目标:

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