Решение:
iostat -d 1 2 | awk 'BEGIN{print "Device\tbps\ttps\tbread\tbwrtn"}/^hdisk/{print $1"\t"$3"\t"$4"\t"$5"\t"$6}'
Выход:
Device bps tps bread bwrtn
hdisk1 0.0 0.0 0.0 0.0
hdisk0 0.0 0.0 0.0 0.0
hdisk1 0.0 0.0 0.0 0.0
hdisk0 77.8K 19.0 0.0 77.8K
Комментарии:
Боюсь, вы все усложняете. Предлагаемое решение является предположением, основанным на вашем входном образце и желаемом результате, которые действительно содержат некоторые несоответствия. Объясните, пожалуйста, откуда берутся данные для hdisk2
и hdisk3
, так как их нет во входных данных. Пожалуйста, также объясните причину создания такого запутанного решения, которое разбивает код на несколько переменных среды.
Ну, эта функция называется changedir
, поэтому она будет работать, только если оболочке будет дана команда changedir [whatever]
. Не каждый раз, когда вы запускаете любую команду. Вы можете злоупотреблять ловушкой DEBUG
для запуска функции для каждой введенной вами командной строки, но здесь она нам не нужна.
Вместо этого просто создайте функцию с именем c
, которая запускает cd..
при задании аргументов d..
или d
и ..
:
c() {
if [[ $1 = 'd..' ]] ||
[[ $1 = 'd' && $2 = '..' ]]; then
command cd --..
else
echo "Invalid arguments to 'c'! Only 'c d..' and 'c d..' are supported." >&2
fi
}
Или вы можете использовать shopt -s autocd
в Bash, что заставит оболочку переходить в каталог, когда указано только имя каталога. Таким образом, foobar
будет делать то же самое, что и cd foobar
(, если не существует команды foobar
), и просто ..
будет идти вверх по каталогу.