У меня есть следующая команда:
usb_soundcard_sink=$(pactl list short sinks | grep "alsa_output" | awk '{ print $2 }' | tail -n1)
вывод этой команды:
alsa_output.pci-0000_00_1b.0.analog-stereo
И это - другая команда, которые находят индекс:
var=$(pactl list short sinks | awk '$2=="alsa_output.pci-0000_00_1b.0.analog-stereo" {print $1}')
вывод:
0
Но я хочу, передают "usb_soundcard_sink" переменную вместо твердого кодированного значения т.е. "alsa_output.pci-0000_00_1b.0.analog-stereo" в вышеупомянутой команде. значение b'coz "usb_soundcard_sink" переменной может измениться динамично.
Также я попробовал следующее:
var=$(pactl list short sinks | awk '$2=="$usb_soundcard_sink" {print $1}')
Но это не работает
таким образом, как я могу передать значение "usb_soundcard_sink" переменной к вышеупомянутой команде
Для использования переменных удара в awk необходимо использовать -v
синтаксис как это:
pactl list short sinks | awk -v myvar="$usb_soundcard_sink" '$2==myvar {print $1}'
# ^^^^^ ^^^^^
# |________________________________|
$ a=3
$ awk -v myvar="$a" 'BEGIN{print myvar}'
3
Я нашел, что это работает также
line=myfile.dat
f=8
s=11
echo $line | awk '{print Здесь, у меня есть файл, названный myfile.dat, переданным по каналу в awk, который выкладывает столбец 8 и 11.
$f', Здесь, у меня есть файл, названный myfile.dat, переданным по каналу в awk, который выкладывает столбец 8 и 11.
$s'}'
Здесь, у меня есть файл, названный myfile.dat, переданным по каналу в awk, который выкладывает столбец 8 и 11.
Оба MAWK (версия AWK Ubuntu по умолчанию) и ПРОСТОФИЛЯ читают параметры командной строки неопции в форме identifier=value
как переменные присвоения, которые выполняются прямо после эти BEGIN
операторы, были выполнены:
% echo | mawk -- '{print var}' var=foo
foo
% echo | gawk -- '{print var}' var=foo
foo
% echo foo bar baz | mawk -- '{$1=$1}1' OFS=,
foo,bar,baz
% echo foo bar baz | gawk -- '{$1=$1}1' OFS=,
foo,bar,baz
я предпочитаю этот метод -v
опция, потому что это сохраняет инструмент для очистки команды, ясно разделяя опции, которые будут переданы интерпретатору и деталям программы.
От man mawk
:
параметры командной строки делятся на три набора: аргументы файла, аргументы присвоения и пустые строки "". Присвоение имеет форму var=string. Когда ARGV [я] исследован как возможный аргумент файла, если это пусто, он пропускается; если это - аргумент присвоения, присвоение на var происходит, и я пропускаю к следующему аргументу; еще ARGV [я] открыт для входа.
От man gawk
:
, Если имя файла на командной строке имеет форму var=val это, рассматривается как переменное присвоение. Переменному var присвоят значение val. (Это происходит после того, как любой НАЧИНАЕТ, правило (правила) были выполнены.) Присвоение переменной командной строки является самым полезным для того, чтобы динамично присвоить значения переменным использование AWK, чтобы управлять, как введенный повреждается в поля и записи. Для управления состоянием также полезно, если несколько передач необходимы по единственному файлу данных.