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

时间:2010-09-24 04:55:25

标签: linux awk paragraph

我有一个小的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 个答案:

答案 0 :(得分:6)

使用command substitution捕获进程的输出。

#!/bin/sh

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

关于shell脚本的一些一般性建议:

  • (几乎)总是引用每个变量引用。
  • 永远不要在变量赋值中在等号周围加上空格。

答案 1 :(得分:3)

  • 您需要使用“命令替换”。将命令放在反引号`COMMAND`内,或者在一对括号前面加一个美元符号$(COMMAND)
  • 要设置变量,请不要使用set,并且=之前和之后不能有空格。

试试这个:

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

答案 2 :(得分:2)

你给我的想法是杀死一个进程:)。对你要杀的任何过程都只是铬。

试试这个:

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

答案 3 :(得分:1)

任何时候你看到grep管道输入awk,你可以放弃grep。对于上述,

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

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

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

答案 4 :(得分:0)

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

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

您可以使用grep ^user

进行相同的操作