【问题标题】:Saving awk output to variable [duplicate]将awk输出保存到变量[重复]
【发布时间】:2013-09-09 23:56:07
【问题描述】:

谁能帮我解决这个问题?

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

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

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

谢谢!

【问题讨论】:

  • 问题不是很清楚。你得到什么错误?来自ps -ef 的行是什么?你对 $variable 有什么期望? (如果您不能提供真实数据,则生成一个显示问题的经过处理的示例。)
  • 问题:变量没有出现在 printf 语句中。最终目标:$12 对应于与该进程一起运行的序列号。我想将该参数保存到一个变量中,以便我可以使用它。

标签: linux bash shell awk centos


【解决方案1】:
#!/bin/bash

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

注意等号后面没有空格。

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

【讨论】:

  • 感谢 RUI 和 NiKiZe,这是等号前后的间距。
  • @wens ,如何从单个命令中保存多个变量?
【解决方案2】:

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

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

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

由于问题已更改,因此已编辑,这将返回有效数据,但尚不清楚 ps -ef 的预期输出是什么以及变量中的预期是什么。

【讨论】:

  • 在最后一个管道之后和'{printf 之前应该有一个awk。它可能在编辑答案时被意外删除了。
【解决方案3】:

如前所述,设置 bash 变量不允许在 LHS 上的变量名和 RHS 上的变量值之间使用“=”号空格。

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}'`

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

【讨论】:

    【解决方案4】:
    variable=$(ps -ef | awk '/[p]ort 10/ {print $12}')
    

    [p] 是一个巧妙的技巧,可以从 ps 中删除搜索结果

    @杰里米 如果您发布ps -ef | grep "port 10" 的输出,以及您需要的内容,帮助您获得正确的语法会更容易

    【讨论】:

      猜你喜欢
      • 2010-12-24
      • 2015-09-04
      • 1970-01-01
      • 2012-08-17
      • 2021-11-12
      • 2011-11-10
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      相关资源
      最近更新 更多