Вот пошаговое объяснение того, что я хочу»
su -c hackbench -pTl 4000
будет экспортировано сообщение типа Работа в многопоточном режиме с 10 группами, каждая из которых использует 40 файловых дескрипторов (== 400 задач) Каждая отправитель передаст 4000 сообщений по 100 байт. Время: 13.353
с разным временем вместо 13.353 13.353
к следующему значению su -c hackbench -pTl 4000
, который, например, Работает в многопоточном режиме с 10 группами, использующими 40 файловых дескрипторов в каждой (== 400 задач). Каждый отправитель передаст 4000 сообщений по 100 байт. Время: 10.476
, чтобы найти среднее значение из 10 прогонов Я знаю, что это можно зациклить с помощью цикла for, и я даже знаю, что время можно добавить, например,
TIME = $ (($ TIME + $ («каким-то образом мы должны принести сюда '10 .476 '»)))
Я просто не знаю, как мне взять ТОЛЬКО 13.353 и 10.476
Использование 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
В стороне, Лучше всего использовать в своей работе имена переменных оболочки в нижнем или смешанном регистре. Это потому, что система использует имена в верхнем регистре для своих переменных, и вы не хотите случайно перезаписать одну из них.