Как передать выход AWK в переменную?
у меня есть небольшой скрипт bash, который greps / awk абзац с помощью ключевого слова.
но после добавления дополнительных кодов:set var = "(......)"
он печатает только пустую строку, а не абзац.
поэтому я хотел бы спросить, знает ли кто-нибудь, Как правильно передать вывод awk в переменную для вывода?
мой код:
#!/bin/sh
set var = "(awk 'BEGIN{RS=ORS="nn";FS=OFS="n"}/FileHeader/' /root/Desktop
/logs/Default.log)"
echo $var;
спасибо!
5 ответов
использовать команду для захвата выходных данных процесса.
#!/bin/sh
VAR="$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log)"
echo "$VAR"
некоторые общие советы относительно сценариев оболочки:
- (почти) всегда цитируйте каждую ссылку на переменную.
- никогда не ставьте пробелы вокруг знака равенства в присваивании переменных.
- вам нужно использовать "подстановку команд". Поместите команду внутри любой backticks,
`COMMAND`
или, в скобках, предшествующих знаку доллара,$(COMMAND)
. - чтобы установить переменную, которую вы не используете
set
и у вас не может быть пробелов до и после=
.
попробуйте это:
var=$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log)
echo $var
вы дали мне идею этого для убийства процесса :). Просто хром для любого процесса, который вы хотите убить.
попробуйте это:
VAR=$(ps -ef | grep -i chromium | awk '{print }'); kill -9 $VAR 2>/dev/null; unset VAR;
в любое время, когда вы видите grep по трубе awk, вы можете бросить grep. для вышеперечисленного,
awk '/^password/ {print }'
awk может легко заменить любую команду текста как отрезок, хвост, wc, TR etc. и особенно много greps пилили рядом друг с другом. я.е
grep some_co.mand | a | grep b ... to | awk '/a|b|and so on/ {some action}.
попробуйте создать переменную, поступающую из vault / Hashicorp, при использовании переменных шаблона packer, например:
BUILD_PASSWORD=$(vault read secret/buildAccount| grep ^password | awk '{print }')
echo $BUILD_PASSWORD
вы можете то же самое с grep ^user