Есть ли способ получить числовое значение из файла и добавить его?

Вот пошаговое объяснение того, что я хочу»

  1. Сценарий запускается 10 time
  2. При вводе команды su -c hackbench -pTl 4000 будет экспортировано сообщение типа Работа в многопоточном режиме с 10 группами, каждая из которых использует 40 файловых дескрипторов (== 400 задач) Каждая отправитель передаст 4000 сообщений по 100 байт. Время: 13.353 с разным временем вместо 13.353
  3. Я хочу добавить 13.353 к следующему значению su -c hackbench -pTl 4000 , который, например, Работает в многопоточном режиме с 10 группами, использующими 40 файловых дескрипторов в каждой (== 400 задач). Каждый отправитель передаст 4000 сообщений по 100 байт. Время: 10.476 , чтобы найти среднее значение из 10 прогонов

Я знаю, что это можно зациклить с помощью цикла for, и я даже знаю, что время можно добавить, например, TIME = $ (($ TIME + $ («каким-то образом мы должны принести сюда '10 .476 '»)))

Я просто не знаю, как мне взять ТОЛЬКО 13.353 и 10.476

0
задан 20 August 2020 в 00:13

1 ответ

Использование awk:

$ su -c hackbench -pTl 4000| awk '{print $NF}'
13.353

Awk разбивает каждую строку ввода на поля . $ NF - последнее поле в строке.

Использование grep:

$ su -c hackbench -pTl 4000| grep -oE '[[:digit:]+-.]+$'
13.353

-o указывает grep печатать только совпадающий контент. [: digit:] + -.] + $ соответствует числу в конце строки.

Использование sed:

$ su -c hackbench -pTl 4000| sed 's/.* //'
13.353

s /.* // удаляет все содержимое выровняйте до последнего пробела включительно. Остается только последнее число.

Использование bash:

$ readarray -d' ' arr < <(su -c hackbench -pTl 4000); echo "${arr[-1]}"
13.353

Это считывает вывод команды hackbench в массив arr . $ {arr [-1]} печатает последний элемент массива. (Для этого требуется последняя версия bash.)

Добавление

Bash не поддерживает числа с плавающей запятой. Итак, нужно использовать awk, bc или другой инструмент. Например:

$ time=10
$ time=$(echo "$time + ${arr[-1]}" | bc -l)
$ echo "$time"
23.353

В стороне, Лучше всего использовать в своей работе имена переменных оболочки в нижнем или смешанном регистре. Это потому, что система использует имена в верхнем регистре для своих переменных, и вы не хотите случайно перезаписать одну из них.

1
ответ дан 21 August 2020 в 07:54

Другие вопросы по тегам:

Похожие вопросы: