2013-09-06 4 views
15

Может ли кто-нибудь помочь мне с этой проблемой?Сохранение вывода awk в переменную

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

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

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

Спасибо!

+0

так что же ваш выход, когда вы выполнили этот сценарий оболочки? – wens

+0

Проблема не совсем ясна. Какая ошибка вы получаете? Что такое строка из 'ps -ef' и что вы ожидаете от переменной $? (если вы не можете предоставить реальные данные, затем создайте дезинфицированный пример, который показывает проблему вместо этого.) – NiKiZe

+0

Проблема: переменная не отображается в инструкции printf. Конечная цель: $ 12 соответствует серийному номеру, который выполняется с этим процессом. Я хочу сохранить этот параметр в переменной, чтобы я мог работать с ним. – Jeremy

ответ

22
#!/bin/bash 

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

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

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

+0

спасибо RUI & NiKiZe, это был интервал до и после знака равенства. – Jeremy

8

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

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

Но реальная проблема, вероятно, что $12 не должно быть qouted с «»

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

+0

Должен быть 'awk' после последнего канала и перед' '{printf'. Вероятно, это было случайно удалено, когда ответ был отредактирован. – aDroid

1

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

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

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

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

«-» INT шаблон AWK запись соответствия устраняет необходимость удаления самого AWK из поиска Результаты.

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

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

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

Смежные вопросы