Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用于计时程序的shell脚本在0秒时测量它_Java_Shell_Time_Nice - Fatal编程技术网

Java 用于计时程序的shell脚本在0秒时测量它

Java 用于计时程序的shell脚本在0秒时测量它,java,shell,time,nice,Java,Shell,Time,Nice,我的教授编写了这个shell脚本来计时我的程序,并显示结果。出于某种原因,它只是在我的程序中输出0。他提供了以下文件: timeit.csh sequence ecoli2500.txt ecoli3000.txt ecoli5000.txt ecoli7000.txt ecoli8000.txt ecoli9000.txt ecoli10000.txt 下面是序列的内容 java EditDistance timeit.csh的内容如下 jav

我的教授编写了这个shell脚本来计时我的程序,并显示结果。出于某种原因,它只是在我的程序中输出0。他提供了以下文件:

timeit.csh
sequence
ecoli2500.txt   
ecoli3000.txt    
ecoli5000.txt    
ecoli7000.txt    
ecoli8000.txt    
ecoli9000.txt    
ecoli10000.txt
下面是序列的内容

java EditDistance
timeit.csh的内容如下

java EditDistance 事实上,除了序列之外,程序可以完美地执行上述每个文件

我不明白的是为什么

./timeit.csh sequence
产生全零

时间到了。csh。。。(下面是EditDistance.java):

#/bin/csh
# 
#用于计时程序的Unix脚本。
#
#命令行:timeit序列
#命令行中的程序数组
设置程序=$argv[1]
#根据需要进行调整
设置CPULIMIT=120
限制cpu$CPULIMIT秒
限制核心0
#输入文件
设置输入=(stx1230.txt\
ecoli2500.txt\
ecoli3000.txt\
ecoli5000.txt\
ecoli7000.txt\
ecoli8000.txt\
ecoli9000.txt\
ecoli10000.txt)
#根据需要进行调整
设置inputpath=`pwd`
#打印页眉
printf“CPU限制=%d秒\n\n”$CPULIMIT
printf“%-25s”数据文件
foreach程序($argv)
printf“%16s”$程序
结束
printf“\n”
#为表格打印正确的数量=个
@i=25+16*$#argv
而($i>0)
printf“=”
@i=$i-1
结束
printf“\n”
#计时并打印每个数据文件的行和每个程序的列
foreach数据文件($input)
printf“%-25s”$datafile
如果(-f$inputpath/$datafile),则
foreach程序($argv)
#在数据文件上打印程序的运行时间
#-带有时间的p标志,以确保其输出以秒而不是分钟为单位进行测量
nice/usr/bin/time-p$program<\
$inputpath/$datafile |&\
egrep“^user[]*[0-9]”\
awk'{if($2>='$CPULIMIT')printf“CPU限制”;else printf(“%16.2f”,$2)}'
#egrep、awk命令提取与用户时间对应的行的第二列
结束
else printf“无法打开”$datafile
恩迪夫
printf“\n”
结束
这里是editdestance.java

import java.util.*;

class EditDistance {
    public static int min(int a, int b, int c) {
        return Math.min(a,Math.min(b,c));
    }
    public static int distance(String one, String two) {
        if (one.length()>two.length()) {
            String temp1 = one;
            String temp2 = two;
            one = temp2;
            two = temp1;
        }
        int[][] d = new int[one.length()+1][two.length()+1];
        d[0][0] = 0;
        int top, left, topleft, cost;
        for (int i = 1; i <= one.length(); i++) {
            d[0][i] = 2*i;
            d[i][0] = 2*i;
        }
        for (int i = 1; i <= one.length(); i++) {
            for (int j = 1; j <= two.length(); j++) {

                if (one.charAt(i-1) == two.charAt(j-1))
                    cost = 0;
                else
                    cost = 1;

                top = d[i][j-1];
                left = d[i-1][j];
                topleft = d[i-1][j-1];
                d[i][j] = min(top+2,left+2,topleft+cost);
            }
        }
        return d[one.length()][two.length()];
    }
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String one = scanner.next();
        String two = scanner.next();
        System.out.println(distance(one,two));
    }
}
import java.util.*;
类编辑距离{
公共静态最小整数(整数a、整数b、整数c){
返回Math.min(a,Math.min(b,c));
}
公共静态整数距离(字符串1、字符串2){
如果(一个.length()>两个.length()){
字符串temp1=1;
字符串temp2=2;
1=temp2;
2=temp1;
}
int[][]d=newint[one.length()+1][two.length()+1];
d[0][0]=0;
int top,left,top left,cost;

对于(int i=1;i我不确定环境的状态(例如:PATH)或文件和权限的状态是什么,但这可能很简单,就像sequence shell脚本的权限问题一样(我想您是说它包含“java EditDistance”)。如果您使用“chmod+x sequence”,它是否有效?另一个问题是它可能不在您的路径中,您可以通过键入“./sequence我不确定环境的状态(例如:path)或者文件和权限的状态是,但它可以像sequence shell脚本的权限问题一样简单(我想您是说它包含“java EditDistance”)。如果您使用“chmod+x sequence”,它是否有效?另一个问题是它可能不在您的路径中,您可以通过键入“./sequence已修复。问题出现在这里:

 nice /usr/bin/time -p $program < 
nice/usr/bin/time-p$program<
在脚本中。如果命令前没有“/”,我的计算机不会执行shell脚本。我的计算机必须不同。将脚本更改为

nice /usr/bin/time -p ./$program <
nice/usr/bin/time-p./$program<
程序运行得很好


我确信我的教授和我都在使用Fedora 8。如果我只需输入程序的名称就可以在终端上运行程序,那会有什么不同呢?

已修复。问题在于:

 nice /usr/bin/time -p $program < 
nice/usr/bin/time-p$program<
在脚本中。如果命令前没有“/”,我的计算机不会执行shell脚本。我的计算机必须不同。将脚本更改为

nice /usr/bin/time -p ./$program <
nice/usr/bin/time-p./$program<
程序运行得很好


我确信我的教授和我都在使用Fedora 8。如果我只需输入程序名,就可以在终端上运行程序,那会有什么不同呢?

/sequencenice /usr/bin/time -p ./$program <