过滤输出并使用bash将过滤后的数据推送到数组中

时间:2014-08-28 18:29:44

标签: arrays bash

我不确定我是否应该在这里发布,serverfault或linux和unix但是......

我在这里要做的是从此命令获取输出:

ps -eo pid -eo ecpu -eo command | sort -k 2 -r | grep -v PID | grep -i frmweb

an example of it is here

...并应用一个过滤器,它只查看使用cpu的进程。 (> 0)

...然后拿走剩下的东西并将PID(第一列)推入一个数组。

2 个答案:

答案 0 :(得分:2)

array_of_pids=( $(your-pipeline | awk '$2 > 0.0 {print $1}') )  

答案 1 :(得分:2)

将进程ID放在名为nonzero的bash数组中:

nonzero=($(ps -eo pid -eo ecpu -eo command | sort -k 2 -r | awk '/frmweb/ && !/PID/ && $2+0>0{print $1}'))

awk命令的格式为condition {commands}。这里,条件由三个条件组成,并且(&&表示逻辑 - 和):

/frmweb/ && !/PID/ && $2+0>0
  • 第一个条件是该行必须包含frmweb

  • 第二个要求它不得包含PID

  • 第三列要求awk$2表示的第二列大于零。 Awk可以进行字符串和数字比较。虽然这里可能没有必要,但在$2+0中使用加法会强制使用数字比较。

如果满足所有三个条件,则通过以下方式打印第一列(进程ID):

print $1

请注意,awk无需使用两个grep命令。