背景
我在这里尝试做的是从一个包含 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/