LINUX.ORG.RU

Чем лучше выдернуть значение?

 , ,


0

1

Не хочется велосипеда из пайпов с cut/grep и т.д.. Надо воткнуть в конфиг Openbox-а команду (так что лучше однострочник, но не на перле). Парсится выхлоп

LC_ALL=C pactl list sink
Надо громкость в процентах вытаскивать. Может у кого есть готовая не лапша? А то я синтаксис awk и sed-а за 5 лет неплохо так подзабыл.

Всякой лапши вида

 LC_ALL=C pactl list | grep -A 9 "Sink #1" | grep "Volume:" | awk '{print $5}'
Хочется избежать.

★★★★★

Последнее исправление: peregrine (всего исправлений: 2)

Ответ на: комментарий от anonymous
Sink #1
	State: SUSPENDED
	Name: alsa_output.pci-0000_00_1b.0.analog-stereo
	Description: Встроенное аудио Аналоговый стерео
	Driver: module-alsa-card.c
	Sample Specification: s16le 2ch 48000Hz
	Channel Map: front-left,front-right
	Owner Module: 8
	Mute: no
	Volume: front-left: 11790 /  18% / -44.70 dB,   front-right: 11790 /  18% / -44.70 dB
	        balance 0.00

Интересуют 18% без разницы с какого канала. Команда, которую я привел выше делает то что нужно, но хотелось бы избавиться от лапши. Количество строк перед и после этого куска строго говоря не фиксированные, так как зависят от звуковой системы и того как собрана альса. Хочется переписать на awk, наверное, но не очень понятно как получить девятую строку после шаблона для парсинга.

LC_ALL=C pactl list | awk '/Sink #1/{getline; print $0}'
Даст вторую строку. В принципе можно в цикле прогнать getline нужное количество раз, но что-то мне подсказывает что это костыли.

peregrine ★★★★★
() автор топика
Ответ на: комментарий от peregrine

ну это местный парсер 2 одинарные кавычки рядом заменяет на двойную. обернул

LC_ALL=C pactl list sinks| awk -v RS='' '/Sink #1/'|awk '/^\s+Volume:/ {print $5}'

bass ★★★★★
()
LC_ALL=C pactl list | grep -A 9 "Sink #1" | awk '/Volume:/ {print $5}'
anonymous
()
Ответ на: комментарий от intelfx

Вброшу

но не на перле

grep -P

GREP(1)

NAME
       grep, egrep, fgrep - print lines matching a pattern


       -P, --perl-regexp
              Interpret the pattern as a Perl-compatible regular expression (PCRE).

Что только не придумают, чтобы не использовать перл.

anonymous
()

Ладненько, вечерком приду и посмотрю что быстрее всего работает.

peregrine ★★★★★
() автор топика
Ответ на: комментарий от peregrine
 | awk '$1 == "Sink" && $2 == "#1" {flag=1}
        flag && $1 == "Volume:"    {print $5; exit(0)}'
futurama ★★★★★
()

Надо воткнуть в конфиг Openbox-а команду

Там же XML вроде? Возьми любую либу для XML и С, напиши маленькую утилитку типа cobox add "section" "command"; cobox del "section" "command"

Deleted
()
Ответ на: комментарий от legolegs

Там на каждую строку по 2 значения громкости и строк может быть больше 2. Твое решение неверное.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.