arrays - 从 bash 中的多个数组中的相同数据位置提取

标签 arrays bash

背景

我在这里尝试做的是从一个包含 PID 信息的文件中读取并将列分离到数组中。我已经完成了这部分,尽管我认为这是比我目前拥有的更好的方法(对同一个文件进行 4 次分类)。

pid=( $(cat /tmp/deadpidlist.log | awk -F " " '{print $1}') )
cpu=( $(cat /tmp/deadpidlist.log | awk -F " " '{print $2}') )
mem=( $(cat /tmp/deadpidlist.log | awk -F " " '{print $3}') )
ctime=( $(cat /tmp/deadpidlist.log | awk -F " " '{print $4}') )

我在做什么?天啊

之后,我需要遍历每个 PID,如果 pid 符合我正在寻找的标准,则将相应的 cpu 使用率、内存使用率和 cpu 时间放在一个文件中,然后将该文件通过电子邮件发送出去。

for i in "${pid[@]}"
do
...
    if grep -Fxq "$pattern" /tmp/or_report.log; then
            echo "$i" >> /tmp/deadpidwalking.log

我的其余代码都放在要点上:https://gist.github.com/sithtoast/e1654adab3cceb137ba2

谢谢!

最佳答案

bash 中的一个简单循环就足够了。请注意很少看到使用下标数组作为 read 的参数。

declare -a pid cpu mem ctime
i=-1
while ((i++)); read "pid[i]" "cpu[i]" "mem[i]" "ctime[i]" and_the_rest; do
:
done < /tmp/deadpidlist.log

一个更直接的循环是

declare -a pid cpu mem ctime
while read a b c d and_the_rest; do
    pid+=("$a")
    cpu+=("$b")
    mem+=("$c")
    ctime+=("$d")
done < /tmp/deadpidlist.log

关于arrays - 从 bash 中的多个数组中的相同数据位置提取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25692047/

相关文章:

c - 将结构体指针数组传递给c中的函数

c++ - 二维数组的段错误

Java数组栈,从上到下打印栈内容

bash - 如何在Apple Script中运行可执行文件

linux - 如何在bash中查询当前光标位置下或屏幕上任意位置的字符

bash - 如何迭代包含 bash 中的空格的列表

javascript - 当它在 javascript 中变为 null 时,数组元素会变成什么?

c - 分割字符串函数的段错误

linux - 将修改日期更改为文件名

bash - 如果该字段前面有 $ 符号,我如何检查该字段是否大于某个数字?