2013-03-01 5 views
1

У меня есть Java-программа, которая требует времени для выполнения, и мне нужно сделать 10 прогонов, и меня интересуют только последние 5 строк вывода, фактический вывод работает сотнями линий. Поскольку я хочу усреднить вывод, я хочу tail -5 для запуска в файл. Также один из параметров (--random) в моих аргументах меняется в каждом прогоне.Unix cat and tail для вывода java-программы

Я делаю следующее:

for i in {1..10} ; do cat output| tail -5 | java -cp src.Tagger.java --random $1; done 

К сожалению я очень плохо Баш.

+3

Не используйте 'cat' для соединения в' tail'. Просто скажите 'tail -5 output'. –

+0

Откуда берется значение '--random'? Код, который вы выглядите корректно, синтаксически, но '$ 1' может не быть значением, которое вы хотите поставить на' --random'. – chepner

+0

Ваш скрипт не соответствует вашему объяснению того, что вы хотите. Ваш скрипт читает последние 5 строк файла 'output' и передает его в качестве входа в ваш процесс' java'. Ваше описание, кажется, говорит, что вам нужны последние 5 строк вывода вашего процесса 'java', который будет' java -cp .... | tail -5'. – twalberg

ответ

1

Прежде всего, вы должны выполнить свою программу Java. Вы не можете выполнить файл .java напрямую, его нужно скомпилировать.

Если у вас есть файл src/Tagger.java, вы можете попробовать скомпилировать его с

javac -cp src src/Tagger.java 

, но если это требует дополнительных библиотек или создавать системы, это может быть совершенно иной. Если вы загрузили это приложение, см. Документацию по проекту.

Это должно бесшумно производить src/Tagger.class. После того как вы это, вы можете попробовать запустить его с

java -cp src Tagger --random 1234 

, хотя опять же, если он имеет зависимости от библиотек, это будет по-другому.

Если это работает, вы можете, наконец, начать пытаться запустить его в цикле:

for i in {1..10} 
do 
    cat output| tail -5 | java -cp src Tagger --random 1234 
done 
1

Вы хотите выход вашего Java программы для перехода на выходе первого, то вам нужно хвост файл. Похоже, вы в настоящее время подаете вывод в свою программу java в качестве входных данных. Я не думаю, что это то, чего ты хочешь. Попробуйте это вместо:

for i in {1..10} 
do 
    java -cp src.Tagger.java --random $1 > output; 
    tail -5 output; 
done 

У меня также есть сомнения в правильности команды java. Вы не должны указывать .java для имени файла при запуске java-файла. Он должен запускаться из скомпилированного файла .class, и команда java предполагает .class, поэтому в командной строке это не требуется. Вы также используете -cp (classpath), но не указываете, что это аргумент. Я бы ожидал, что команда java будет больше похожа:

java -cp classesdir com.mydomain.myapp.Tagger 
+0

yeh sorry Я положил .java по ошибке. Я не использую его во время работы –