如何根据字典中的值找到键?

如何根据字典中的值找到键?
#!/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 脚本相比,还有更好的选择来完成这些事情。

相关内容