Сохранение вывода 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"
и что вам нужно от строки, было бы проще помочь вам получить правильный синтаксис