如何将 AWK 输出传递给变量?

发布于 2024-09-24 13:59:43 字数 325 浏览 6 评论 0原文

我有一个小的 bash 脚本,通过使用关键字来 grep/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;

谢谢!

I have a small bash script that greps/awk paragraph by using a keyword.

But after adding in the extra codes : set var = "(......)" it only prints a blank line and not the paragraph.

So I would like to ask if anyone knows how to properly pass the awk output into a variable for outputting?

My codes:

#!/bin/sh

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

Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

酷炫老祖宗 2024-10-01 13:59:43

使用命令替换捕获进程的输出。

#!/bin/sh

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

关于 shell 脚本编写的一些一般建议:(

  • 几乎)始终引用每个变量引用。
  • 切勿在变量赋值中的等号两边添加空格。

Use command substitution to capture the output of a process.

#!/bin/sh

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

some general advice with regards to shell scripting:

  • (almost) always quote every variable reference.
  • never put spaces around the equals sign in variable assignment.
望喜 2024-10-01 13:59:43
  • 您需要使用“命令替换”。将命令放在反引号 `COMMAND` 内,或者放在前面有美元符号的一对括号内,$(COMMAND)
  • 要设置变量,您不需要使用 set 并且 = 前后不能有空格。

试试这个:

var=$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log)
echo $var
  • You need to use "command substitution". Place the command inside either backticks, `COMMAND` or, in a pair of parentheses preceded by a dollar sign, $(COMMAND).
  • To set a variable you don't use set and you can't have spaces before and after the =.

Try this:

var=$(awk 'BEGIN{RS=ORS="\n\n";FS=OFS="\n"}/FileHeader/' /root/Desktop/logs/Default.log)
echo $var
强者自强 2024-10-01 13:59:43

你给了我这个杀死进程的想法:)。只是铬到任何你想杀死的进程。

试试这个:

VAR=$(ps -ef | grep -i chromium | awk '{print $2}'); kill -9 $VAR 2>/dev/null; unset VAR;

You gave me the idea of this for killing a process :). Just chromium to whatever process you wanna kill.

Try this:

VAR=$(ps -ef | grep -i chromium | awk '{print $2}'); kill -9 $VAR 2>/dev/null; unset VAR;
仅一夜美梦 2024-10-01 13:59:43

每当您看到 grep 通过管道传输到 awk 时,您都可以删除 grep。对于上述内容,

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

awk 可以轻松替换任何文本命令,如 cut、tail、wc、tr 等,特别是彼此相邻的多个 grep。 IE

grep some_co.mand | a | grep b ... to | awk '/a|b|and so on/ {some action}.

anytime you see grep piped to awk, you can drop the grep. for the above,

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

awk can easily replace any text command like cut, tail, wc, tr etc. and especally multiple greps piped next to each other. i.e

grep some_co.mand | a | grep b ... to | awk '/a|b|and so on/ {some action}.
柠檬 2024-10-01 13:59:43

使用打包器模板变量时,尝试创建来自Vault/Hashicorp的变量,如下所示:

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

您可以使用grep ^user进行相同的操作

Try to create a variable coming from vault/Hashicorp, when using packer template variables, like so:

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

You can to the same with grep ^user

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文