我有一个问题,当一个数字在某些输出之前只应该打印一次时,它会打印两次。我将突出显示最相关的内容,但为了提供上下文,我将提供我的整个脚本。
#!/bin/bash
我将 a 的输出加载ps aux
到数组中。
N=0
for i in $(ps aux | awk '{print $11,$4}' | grep -v 0.0 | grep -v MEM | sort) ; do
array[$N]="$i"
let "N= $N + 1"
done
这里我把数组分成两个数组
N=0
for i in `seq 0 ${#array[@]}`; do
if [ $(( $i % 2 )) -eq 0 ]; then arrayb[$N]=${array[$i]} ; else arrayc[$N]=${array[$i]} ;fi
let "N= $N + 1"
done
现在我希望合并重复的条目(请原谅一些令人费解的变量命名;我在黑暗中拍摄试图排除故障)。
N=0
c=0
for i in `seq 0 ${#arrayb[@]}`; do
let "B= $N - 1"
A=`echo ${arrayb[$B]} | tr -d '\n'`
B=`echo ${arrayb[$N]} | tr -d '\n'`
#A=${arrayb[$B]}
#B=${arrayb[$N]}
这是我检查前一个数组元素是否等于后者的地方。如果是这样,合并并删除。
#if [ "$A" = "$B" ]; then
#arrayc[$N]=$(bc <<< ${arrayc[$N]}+${arrayc[$B]}); unset arrayb[$B];unset arrayc[$B]; echo trololo
#echo derp
#fi
重要的部分是这个。echo $c
然后我echo $A $B
。但是,我的输出显示以下内容:
0
awk
1
awk
2
-bash
3
-bash
4
-bash
什么时候应该是这样的:
0
awk
awk
2
-bash
-bash
3
echo $c
echo -n "$A" "$B"
echo ""
let "c=$c+1"
let "N= $N + 1"
done
我无法理解的是它是如何打印的,a
然后是相同的循环。任何帮助将不胜感激。c
b
c