вывести переменную со значением с плавающей точкой - PullRequest
0 голосов
/ 11 апреля 2019
Declare total=O 
for repeat in {1..100}; do
   executiontime=$(gtime -f "%U" python3 main.py | tail -0)
   total=$(echo "scale=2; $total + $executiontime" | bc)  
done
echo "$total/100"

Приведенный выше код является частью цикла, и мне нужна переменная total, чтобы иметь среднее время выполнения файла main.py . Мне трудно напечатать значение переменной total, так как это переменная с плавающей запятой. Какой правильный синтаксис для этого?

Это вывод, который я получаю:

 (standard_in) 2: parse error

Я думаю, что проблема в команде tail , когда я использую: gtime -f "%U" python3 main.py | tail -1 это вывод, который я получаю:

  $ ./gtime -f "%U" python3 main.py | tail -1 
    10.08
    )

но потом с хвостом -0

gtime -f "%U" python3 main.py | tail -0
9.66

Ответы [ 2 ]

1 голос
/ 11 апреля 2019

gtime записывает время в стандартную ошибку, которую вы хотите записать, а не в стандартный вывод.Используйте это:

executiontime=$(gtime -f "%U" python3 main.py 2>&1 >/dev/null)

2>&1 дублирует стандартную ошибку на стандартный вывод gtime;>/dev/null вызывает сброс стандартного вывода gtime.Конечным результатом является то, что вы фиксируете время, полученное с помощью gtime, но не выводите main.py.

Трубопровод к tail -0 в основном является дорогим эквивалентом > /dev/null, но стандартная ошибка не записано в трубу, поэтому вы все еще видите номер.Но $(...) не захватывает это.

0 голосов
/ 11 апреля 2019

Сначала вам нужно убедиться, что executionTime содержит ожидаемое число с плавающей запятой, затем вы можете приступить к вычислению среднего времени выполнения.

Ответ будет отличаться в зависимости от используемой вами оболочки,Например, Bash не поддерживает арифметику с плавающей запятой, следовательно, это не будет работать:

# will output the plain string without performing any arithmetic
echo "$total/100" 

Вместо этого вам нужно будет использовать альтернативный подход, например:

echo $(bc <<< "scale=2; $total/100")

Разрешитьмне связать несколько связанных ответов, которые объясняют другие методы:

Как использовать деление с плавающей точкой в ​​bash?

Как я могуделать деление с переменными в оболочке Linux?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...