Используйте awk и grep для вывода строки без эха и возврата значения в переменную - PullRequest
0 голосов
/ 15 ноября 2018

Существует ответ на вопрос о том, как использовать grep или awk без эха, но я хочу, чтобы это значение возвращалось в переменную. Как ниже:

a="hello world"
value="$a" | grep "world" | awk '{print $NF}'
echo $value

Но значение пусто. Я не хочу использовать echo для получения значения, как показано ниже:

value=$(echo "$a" | grep "world" | awk '{print $NF}')

Можно ли заставить этот первый код работать?

Ответы [ 2 ]

0 голосов
/ 15 ноября 2018

Если вы уверены, что world является частью строки, вы можете использовать

value=${a//* }

или

value=${a##* }

(Не решение, использующее awk, но добавленное ввиду комментария ОП, он "хочет выполнить свой код быстрее").

0 голосов
/ 15 ноября 2018

Не могли бы вы попробовать использовать следующее, если вы не хотите использовать echo, я использую здесь концепцию строки. Также вам НЕ нужно использовать grep, так как awk сам может искать ключевые слова в Input_file или значениях переменной.

a="hello world"
value=$(awk '/world/{print $NF}' <<<"$a")
echo "$value"

Вы можете получить больше информации от man bash о Here Strings следующим образом.

Here Strings Вариант документов здесь, формат:

      <<<word


РЕДАКТИРОВАТЬ: Так как OP говорит, что OP тоже не хочет иметь концепцию Here Strings, тогда может помочь следующее.

a="hello world"
value=$(awk -v val="$a" 'BEGIN{num=split(val, array," ");print array[num]}')
echo "$value"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...