【发布时间】:2016-08-21 06:56:17
【问题描述】:
我正在尝试进行一些测量,我想知道通过nawk 打印东西的最快方法是什么。
目前我使用printf ARR[2] " ";,但打印时间似乎比平时要多。
信息:我打印了大约 500 个数字,并在 printf 中添加了空格,这样打印出来的内容就不会粘在一起了。我也在 ksh 上运行脚本,在 unix oracle solaris 中。
像这样,打印所有内容大约需要 14 秒,有没有更快的方法可以做到这一点?
提前致谢!
更新
我关心的函数是 awkfun,我在调用它时使用time 来进行时间测量。
将NUMBERS 视为一个包含 1000 个随机数的变量,将XNUMBERS 视为一个包含 1000 个随机数的变量,但在这种格式中,123|321,因此它采用随机数反转它并在中间。
我正在检查每个NUMBERS 是否存在于XNUMBERS 中,如果存在,我只打印出相反的数字。
numfun() {
NUMBERS=`nawk ' BEGIN{
srand();
for (i=0; i<=999; i++) {
printf("%s\n", 100 + int(rand() * (899)));
}
}'`
}
numfun
sleep 1
xnumfun() {
XNUMBERS=`nawk ' BEGIN{
srand();
for (i=0; i<=999; i++) {
XNUMBERS[i]= 100 + int(rand() * (899));
}
for (i=0; i<=999; i++) {
ver=XNUMBERS[i] "";
rev = "";
for (q=length(ver); q!=0; q--) {
rev = rev substr(ver, q, 1);
}
printf("%s\n", XNUMBERS[i] "|" rev );
}
}'`
}
xnumfun
awkfun() {
for n in $NUMBERS
do
echo "${XNUMBERS}" | nawk -v VAR=$n '
{
split($1,ARR,"|")
if (VAR == ARR[1]){
printf ARR[2] " ";
exit;
}
}'
done
}
shellfun() {
for n in $NUMBERS
do
for x in $XNUMBERS
do
if test "$n" -eq "${x%%\|*}"
then
echo "${x##*\|}";
break;
fi
continue;
done
done
}
sleep 1
time awkfun;
echo "\nAWK TIME\n\n-----------------------------";
time shellfun;
echo "\nSHELL TIME\n\n-----------------------------";
time numfun;
echo "\nNUMBERS TIME\n\n-----------------------------";
time xnumfun;
echo "\nXNUMBERS TIME\n\n-----------------------------\n\nTOTAL TIME\n";
结果
仅供参考,提炼脚本后的结果,AWK平均实时=0,84,SHELL平均实时:0,48
【问题讨论】:
-
请显示完整的工作脚本和示例输入。
-
@JohnZwinck 刷新并查看我创建的脚本,以便您更好地了解我在做什么,感谢您的回复:)
-
您可以从接受的答案中得出结论,工具会有所帮助,但您的脚本技能也会有所帮助。请记住:始终尽量避免在长循环中调用外部程序。
-
最后的时间结果是?
-
@WalterA 刚刚在帖子中添加了结果作为更新,请查看!!