передать переменную на исполнения

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Ответить
Аватара пользователя
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:

передать переменную на исполнения

Сообщение bars »

Привет.
Есть команда мониторинга диска.
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 систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
ormorph
Сообщения: 2604
ОС: Gentoo

Re: передать переменную на исполнения

Сообщение ormorph »

xargs?
Ну и bc -l
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:

Re: передать переменную на исполнения

Сообщение bars »

smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{print $5}' | cut -c 2- | awk '{print $1/1000}'
Сделал так, топорно, но работает.
Помница была переменная sh которая содержит последний вывод от команды.
Не помню как она называется.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: передать переменную на исполнения

Сообщение olecya »

Вывод этой строчки приведите, пожалуйста:
bars писал:
26.03.2021 16:34
smartctl -A /dev/nvme0 | grep "Data Units Read"
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:

Re: передать переменную на исполнения

Сообщение bars »

Чуть переделал.
smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{sub(/^\[/,"",$5); print $5/1000}'
0,0381
Добавлено (16:46):
olecya писала:
26.03.2021 16:43
Вывод этой строчки приведите, пожалуйста:
# smartctl -A /dev/nvme0 | grep "Data Units Read"
Data Units Read: 74 421 [38,1 GB]
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: передать переменную на исполнения

Сообщение olecya »

bars писал:
26.03.2021 16:45
smartctl -A /dev/nvme0 | grep "Data Units Read" | awk '{sub(/^\[/,"",$5); print $5/1000}'
Тогда так:

Код: Выделить всё

smartctl -A /dev/nvme0 | awk '/Data Units Read/ {sub(/^\[/,"",$5); print $5/1000}'
Добавлено (16:48):
bars писал:
26.03.2021 16:34
Помница была переменная sh которая содержит последний вывод от команды.

Код: Выделить всё

echo 1 2 3 4 5
echo $_
Но это не от команды, а последний параметр
Последний раз редактировалось olecya 26.03.2021 16:51, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:

Re: передать переменную на исполнения

Сообщение bars »

olecya писала:
26.03.2021 16:47
smartctl -A /dev/nvme0 | awk '/Data Units Read/ {sub(/^\[/,"",$5); print $5/1000}'
Мне нравится такое исполнение, его и буду использовать.
Спасибо!
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: передать переменную на исполнения

Сообщение olecya »

bars писал:
26.03.2021 16:51
Мне нравится такое исполнение, его и буду использовать.
Если бы посмотреть на строчку, взможно было бы обойтись разделителем полей -F (FS) вместо sub
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:

Re: передать переменную на исполнения

Сообщение bars »

olecya писала:
26.03.2021 16:53
Если бы посмотреть на строчку, взможно было бы обойтись разделителем полей -F (FS) вместо sub
Я пробовал с помощью -F . но что то тщетно!
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: передать переменную на исполнения

Сообщение olecya »

Например:

Код: Выделить всё

awk -F'[[:space:][]*' '/Data Units Read/ {print $6}'
или

Код: Выделить всё

awk -F'[ []' '/Data Units Read/ {print $6}'
Подобрать номер поля $7 или $8
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: передать переменную на исполнения

Сообщение Bizdelnick »

env LC_ALL=C smartctl -A /dev/nvme0 | awk '/Data Units Read/{print $5/1000}'
Добавлено (17:09):
А, не, так не пойдёт. Писал, когда ещё не видел, как выглядит исходная строка.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: передать переменную на исполнения

Сообщение olecya »

Попробую догадаться предпоследнее поле:

Код: Выделить всё

smartctl -A /dev/nvme0 | awk -F"[ []" '/Data Units Read/ {print $(NF-1)/1000}'
Добавлено (17:40):
Извиняюсь, я тоже не заметила пример строки и убрала лишнюю кавычку по замечанию
Последний раз редактировалось olecya 26.03.2021 17:45, всего редактировалось 1 раз.
Спасибо сказали:
Аватара пользователя
bars
Сообщения: 917
ОС: BSD/LINUX
Контактная информация:

Re: передать переменную на исполнения

Сообщение bars »

olecya писала:
26.03.2021 17:28
smartctl -A /dev/nvme0 | awk ' -F"[ []" '/Data Units Read/ {print $(NF-1)/1000}'
Чуть отредактировал, убрал лишний '
smartctl -A /dev/nvme0 | awk -F"[ []" '/Data Units Read/ {print $(NF-1)/1000}'
0,0381
Спасибо.
Настройка BSD систем
Знание сила, незнание Рабочая сила!
Спасибо сказали:
Аватара пользователя
olecya
Сообщения: 900
ОС: debian, fedora (i3-wm)

Re: передать переменную на исполнения

Сообщение olecya »

Bizdelnick писал:
26.03.2021 17:06
LC_ALL=C
Как awk работает с запятой? Странно да? Похоже все таки там точка
Добавлено (18:28):
Нет во FreeBSD отрабатывает с запятой :unsure:
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: передать переменную на исполнения

Сообщение Bizdelnick »

olecya писала:
26.03.2021 17:53
Как awk работает с запятой? Странно да? Похоже все таки там точка
Проверил. Забавное поведение: original-awk учитывает локаль при разборе, а gawk и mawk всегда хотят точку в качестве разделителя.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ответить