我想把awk的输出保存到一个变量中。

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

编辑:12美元对应的是在该进程上运行的一个参数。

2 个评论
这个问题其实并不清楚。你得到的错误是什么?从ps -ef开始的一行是什么,你在$variable中期待什么?(如果你不能提供真实的数据,那就生成一个显示问题的消毒过的例子来代替。)
问题:变量没有显示在printf语句中。 最终目标:12美元对应的是与该进程一起运行的一个序列号。 我想把这个参数保存到一个变量中,这样我就可以用它来工作。
linux
bash
shell
awk
centos
Jeremy
Jeremy
发布于 2013-09-06
4 个回答
thvwns
thvwns
发布于 2013-09-06
已采纳
0 人赞同
#!/bin/bash
variable=`ps -ef | grep "port 10 -" | grep -v "grep port 10 -" | awk '{printf $12}'`
echo $variable

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

你也可以使用$(),它允许嵌套并且可读。

thanks RUI & NiKiZe, it was the spacing before and after the equal sign.
@wens ,如何从一个命令中保存多个变量?
NiKiZe
NiKiZe
发布于 2013-09-06
0 人赞同

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

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

但真正的问题可能是,$12不应该用""来呼喊。

由于问题被修改,所以进行了编辑,这返回了有效的数据,但不清楚ps -ef的预期输出是什么,变量中的预期是什么。

在最后一个管子后面和'{printf之前应该有一个awk。它可能是在编辑答案时被不小心删除了。
user608724
发布于 2013-09-06
0 人赞同

如前所述,设置bash变量不允许在'='号的左边缘变量名和右边缘变量值之间有空格。

awk可以做所有的事情,并且避免了 "awk "的额外 "grep"。awk的printf是为了不在字符串中添加不必要的"\n",这将使perl-ish matcher程序感到不安。在bash中,针对你的情况的变量/参数扩展没有这个问题,所以这些都可以。

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

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

Jotne
Jotne
发布于 2013-09-06
0 人赞同
variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')