我遇到以下情况:
我有一个只包含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
?如果是,我可以如何以及如何通过终端运行脚本?
答案 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