Как передать вывод AWK в переменную? - PullRequest
6 голосов
/ 24 сентября 2010

У меня есть небольшой скрипт bash, который greps / awk абзац использует ключевое слово.

Но после добавления дополнительных кодов: set var = "(......)" он печатает только пустую строку, а не абзац.

Итак, я хотел бы спросить, знает ли кто-нибудь, как правильно передать вывод awk в переменную для вывода?

Мои коды:

#!/bin/sh

set var = "(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop
/logs/Default.log)"
echo $var;

Спасибо!

Ответы [ 5 ]

6 голосов
/ 24 сентября 2010

Используйте подстановку команд для захвата выходных данных процесса.

#!/bin/sh

VAR="$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log)"
echo "$VAR"

некоторые общие рекомендации относительно сценариев оболочки:

  • (почти)всегда заключайте в кавычки каждую переменную.
  • никогда не ставьте пробелы вокруг знака равенства в присваивании переменной.
3 голосов
/ 24 сентября 2010
  • Вам необходимо использовать «подстановку команд».Поместите команду внутри обратных символов `COMMAND` или в скобках, перед которыми стоит знак доллара $(COMMAND).
  • Чтобы установить переменную, вы не используете set, и у вас не должно быть пробелов до и после =.

Попробуйте это:

var=$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log)
echo $var
2 голосов
/ 09 октября 2011

Вы дали мне представление об этом за убийство процесса :). Просто хром для любого процесса, который ты хочешь убить.

Попробуйте это:

VAR=$(ps -ef | grep -i chromium | awk '{print $2}'); kill -9 $VAR 2>/dev/null; unset VAR;
1 голос
/ 23 апреля 2016

каждый раз, когда вы видите grep, отправленный в awk, вы можете сбросить grep.для вышеупомянутого,

awk '/^password/ {print $2}'

awk может легко заменить любую текстовую команду, такую ​​как cut, tail, wc, tr и т. д. и, в частности, несколько greps, передаваемых рядом друг с другом.т.е.

grep some_co.mand | a | grep b ... to | awk '/a|b|and so on/ {some action}.
0 голосов
/ 10 февраля 2016

Попробуйте создать переменную, поступающую из хранилища / Hashicorp, при использовании переменных шаблона упаковщика, например:

BUILD_PASSWORD=$(vault read secret/buildAccount| grep ^password | awk '{print $2}')
echo $BUILD_PASSWORD

То же самое можно сделать с помощью grep ^user

...