将awk输出保存到变量

时间:2013-09-06 01:11:51

标签: linux bash shell awk centos

任何人都可以帮我解决这个问题吗?

我正在尝试将awk输出保存到变量中。

variable = `ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}'`
printf "$variable"

编辑:$ 12对应于在该进程上运行的参数。

谢谢!

4 个答案:

答案 0 :(得分:33)

#!/bin/bash

variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'`
echo $variable

请注意,等号后没有空格。

您还可以使用允许嵌套的$()并且可读。

答案 1 :(得分:11)

我认为$()语法更容易阅读......

variable=$(ps -ef | grep "port 10 -" | grep -v "grep port 10 -"| awk '{printf "%s", $12}')

但真正的问题可能是$12不应该与“”

一起讨论

自问题发生变更以来编辑过,这会返回有效数据,但不清楚ps -ef的预期输出是什么以及变量的预期结果。

答案 2 :(得分:1)

如前所述,设置bash变量不允许LHS上的变量名与“R”上的变量值之间的空格为“=”符号。

awk可以做任何事情并避免“awk”病房额外'grep'。 awk的printf的使用是不在字符串中添加不必要的“\ n”,这将给perl-ish匹配器程序带来麻烦。 bash中案例的变量/参数扩展没有这个问题,所以这些都可以工作:

variable=$(ps -ef | awk '/port 10 \-/ {print $12}')

variable=`ps -ef | awk '/port 10 \-/ {print $12}'`

awk记录匹配模式中的' - 'int消除了从搜索结果中删除awk本身的需要。

答案 3 :(得分:0)

variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')

[p]是一个巧妙的技巧,可以从ps

中删除搜索

@Jeremy 如果您发布ps -ef | grep "port 10"的输出,以及您需要的内容,那么可以更轻松地帮助您获得正确的语法