![如何根据字典中的值找到键?](https://linux22.com/image/941048/%E5%A6%82%E4%BD%95%E6%A0%B9%E6%8D%AE%E5%AD%97%E5%85%B8%E4%B8%AD%E7%9A%84%E5%80%BC%E6%89%BE%E5%88%B0%E9%94%AE%EF%BC%9F.png)
#!/bin/bash
cd /pg
declare -A arr
file=`ls -l |awk '{print $9}'`
#declare -A test_dict
for i in $file
do
#if [[ "$one" -eq "1" ]]; then
one=`cat /pg/$i | wc -l`
if [[ "$one" -eq "1" ]]; then
key=$(awk 'NR==1{print $7}' "/pg/$i")
value=$(awk 'NR==1{print $8}' "/pg/$i")
#echo $key
#echo $value
arr["$key"]=$value
else
key=$(awk 'NR==1{print $7}' "/pg/$i")
value=$(awk 'NR==1{print $8}' "/pg/$i")
value1=$(awk 'NR==2{print $8}' "/pg/$i")
c=$(($value+$value1))
arr["$key"]=$c
fi
done
echo ${arr[@]}
max=0
for j in "${arr[@]}";do
if (( $j > max));then
max=$j
fi
done
echo "max:$max"
echo "${!arr[@]}"
从上面的代码中,我将“key”、“values”附加到字典中并获取最大值,因此现在我需要根据“max”值打印“key”。value 为“120 60 75 60”,最大值为“120”,key 为“hari azureuser cnu root”,期望输出为:hari,因为最大值 [120] 来自“hari”。请帮助我实现相同的目标。
答案1
循环遍历键:
max=0
for k in "${!arr[@]}";do
if (( ${arr["$k"]} > max));then
max="${arr["$k"]}"
max_key="$k"
fi
done
echo "$max_key"
但是,与使用 bash 脚本相比,还有更好的选择来完成这些事情。