Сохранение вывода awk в переменную

Может ли кто-нибудь помочь мне решить эту проблему?

Я пытаюсь сохранить выход awk в переменную.

variable = `ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}'`
printf "$variable"

EDIT: $12 соответствует параметру, выполняемому в этом процессе.

Спасибо!

Ответы

Ответ 1

#!/bin/bash

variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'`
echo $variable

Обратите внимание, что после знака равенства нет пробела.

Вы также можете использовать $(), который позволяет вложенность и читаемость.

Ответ 2

Я думаю, что синтаксис $() легче читать...

variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}')

Но реальная проблема, вероятно, в том, что $12 не следует указывать с помощью ""

Отредактировано с момента изменения вопроса. Это возвращает действительные данные, но неясно, каков ожидаемый результат ps -ef и что ожидается в переменной.

Ответ 3

как отмечалось ранее, установка переменных bash не допускает пробелов между именем переменной в LHS и значением переменной RHS знака '='.

awk может делать все и избегать дополнительного "grep" "awk". Использование awk printf заключается в том, чтобы не добавлять ненужную "\n" в строку, которая давала бы подключаемые программы perl-ish matcher. Расширение переменной/параметра для вашего случая в bash не имеет этой проблемы, поэтому любая из этих работ:

variable=$(ps -ef | awk '/port 10 \-/ {print $12}')

variable=`ps -ef | awk '/port 10 \-/ {print $12}'`

Параметр "-" int, соответствующий шаблону записи awk, устраняет необходимость удаления awk из результатов поиска.

Ответ 4

variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')

[p] - это аккуратный трюк, чтобы удалить поиск из ps

@Jeremy Если вы публикуете вывод ps -ef | grep "port 10" и что вам нужно от строки, было бы проще помочь вам получить правильный синтаксис