передать переменную на исполнения
Модераторы: /dev/random, Модераторы разделов
-
- Сообщения: 846
- ОС: BSD/LINUX
передать переменную на исполнения
Привет.
Есть команда мониторинга диска.
smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{print $5}' | cut -c 2-
38,0
Выдает в гигабайтах, хочу перевести в терабайты данные.
Для этого нужно разделить на 1000.
Городить структуру из кучи переменных не хочется.
Вопрос как передать переменную команды smartctl (38) для продолжения ее использования.
smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{print $5}' | cut -c 2- | echo "38/1000" | bc
Вроде просто но что то застопорился на этом.
Есть команда мониторинга диска.
smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{print $5}' | cut -c 2-
38,0
Выдает в гигабайтах, хочу перевести в терабайты данные.
Для этого нужно разделить на 1000.
Городить структуру из кучи переменных не хочется.
Вопрос как передать переменную команды smartctl (38) для продолжения ее использования.
smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{print $5}' | cut -c 2- | echo "38/1000" | bc
Вроде просто но что то застопорился на этом.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Знание сила, незнание Рабочая сила!
-
- Сообщения: 2570
- ОС: Gentoo
Re: передать переменную на исполнения
xargs?
Ну и bc -l
Ну и bc -l
-
- Сообщения: 846
- ОС: BSD/LINUX
Re: передать переменную на исполнения
smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{print $5}' | cut -c 2- | awk '{print $1/1000}'
Сделал так, топорно, но работает.
Помница была переменная sh которая содержит последний вывод от команды.
Не помню как она называется.
Сделал так, топорно, но работает.
Помница была переменная sh которая содержит последний вывод от команды.
Не помню как она называется.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Знание сила, незнание Рабочая сила!
-
- Сообщения: 892
- ОС: debian, fedora (i3-wm)
-
- Сообщения: 846
- ОС: BSD/LINUX
Re: передать переменную на исполнения
Чуть переделал.
smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{sub(/^\[/,"",$5); print $5/1000}'
0,0381
Data Units Read: 74 421 [38,1 GB]
smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{sub(/^\[/,"",$5); print $5/1000}'
0,0381
Добавлено (16:46):
# smartctl -A /dev/nvme0 | grep "Data Units Read"
Data Units Read: 74 421 [38,1 GB]
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Знание сила, незнание Рабочая сила!
-
- Сообщения: 892
- ОС: debian, fedora (i3-wm)
Re: передать переменную на исполнения
Тогда так:
Код: Выделить всё
smartctl -A /dev/nvme0 | awk '/Data Units Read/ {sub(/^\[/,"",$5); print $5/1000}'
Добавлено (16:48):
Код: Выделить всё
echo 1 2 3 4 5
echo $_
Последний раз редактировалось olecya 26.03.2021 16:51, всего редактировалось 1 раз.
Спасибо сказали:
-
- Сообщения: 846
- ОС: BSD/LINUX
Re: передать переменную на исполнения
Мне нравится такое исполнение, его и буду использовать.
Спасибо!
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Знание сила, незнание Рабочая сила!
-
- Сообщения: 892
- ОС: debian, fedora (i3-wm)
-
- Сообщения: 846
- ОС: BSD/LINUX
Re: передать переменную на исполнения
Я пробовал с помощью -F . но что то тщетно!
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Знание сила, незнание Рабочая сила!
-
- Сообщения: 892
- ОС: debian, fedora (i3-wm)
Re: передать переменную на исполнения
Например:
или
Подобрать номер поля $7 или $8
Код: Выделить всё
awk -F'[[:space:][]*' '/Data Units Read/ {print $6}'
Код: Выделить всё
awk -F'[ []' '/Data Units Read/ {print $6}'
-
- Модератор
- Сообщения: 20567
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: передать переменную на исполнения
env LC_ALL=C smartctl -A /dev/nvme0 | awk '/Data Units Read/{print $5/1000}'
Добавлено (17:09):
А, не, так не пойдёт. Писал, когда ещё не видел, как выглядит исходная строка.Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 892
- ОС: debian, fedora (i3-wm)
Re: передать переменную на исполнения
Попробую догадаться предпоследнее поле:
Код: Выделить всё
smartctl -A /dev/nvme0 | awk -F"[ []" '/Data Units Read/ {print $(NF-1)/1000}'
Добавлено (17:40):
Извиняюсь, я тоже не заметила пример строки и убрала лишнюю кавычку по замечанию
Последний раз редактировалось olecya 26.03.2021 17:45, всего редактировалось 1 раз.
Спасибо сказали:
-
- Сообщения: 846
- ОС: BSD/LINUX
Re: передать переменную на исполнения
Чуть отредактировал, убрал лишний '
smartctl -A /dev/nvme0 | awk -F"[ []" '/Data Units Read/ {print $(NF-1)/1000}'
0,0381
Спасибо.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Знание сила, незнание Рабочая сила!
Спасибо сказали:
-
- Сообщения: 892
- ОС: debian, fedora (i3-wm)
Re: передать переменную на исполнения
Как awk работает с запятой? Странно да? Похоже все таки там точка
Добавлено (18:28):
Нет во FreeBSD отрабатывает с запятой
Спасибо сказали:
-
- Модератор
- Сообщения: 20567
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: передать переменную на исполнения
Проверил. Забавное поведение: original-awk учитывает локаль при разборе, а gawk и mawk всегда хотят точку в качестве разделителя.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали: