Как передать строковую переменную как параметр в awk

У меня есть следующая команда:

usb_soundcard_sink=$(pactl list short sinks | grep "alsa_output" | awk '{ print $2 }' | tail -n1)

вывод этой команды:

alsa_output.pci-0000_00_1b.0.analog-stereo

И это еще одна команда, которая находит номер индекса:

output:

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» в приведенную выше команду

1
задан 28 April 2014 в 20:56

2 ответа

Я обнаружил, что это тоже работает

line=myfile.dat
f=8
s=11
echo $line | awk '{print $'$f',$'$s'}'

Здесь у меня есть файл с именем myfile.dat, связанный с awk, который выплескивает столбцы 8 и 11.

2
ответ дан 24 May 2018 в 08:30

Оба MAWK (версия AWK по умолчанию Ubuntu) и GAWK читают необязательные аргументы командной строки в форме identifier=value как назначения переменных, которые выполняются сразу после выполнения операторов BEGIN:

Я предпочитаю этот метод опции -v, потому что он удерживает команду очиститель, четко разделяя параметры, которые нужно передать интерпретатору и детали программы.

Из man mawk:

Аргументы командной строки делятся на три набора: аргументы файла, аргументы назначения и пустые строки "". Назначение имеет вид var = string. Когда ARGV [i] рассматривается как возможный аргумент файла, если он пуст, он пропускается; если это аргумент присваивания, выполняется присвоение var, и я перехожу к следующему аргументу; иначе ARGV [i] открывается для ввода.

Из man gawk:

Аргументы командной строки делятся на три набора: аргументы файла, аргументы назначения и пустые строки "". Назначение имеет вид var = string. Когда ARGV [i] рассматривается как возможный аргумент файла, если он пуст, он пропускается; если это аргумент присваивания, выполняется присвоение var, и я перехожу к следующему аргументу; иначе ARGV [i] открывается для ввода.

0
ответ дан 24 May 2018 в 08:30

Другие вопросы по тегам:

Похожие вопросы: