在多个数组中查找值并返回对应数组名称的实现需求
解决方案:匹配数值到对应数组并输出结果
可以用Bash脚本实现这个需求,核心思路是先建立数值到数组名的映射关系,再遍历目标数值文件完成匹配输出。
脚本实现
# 定义你的8个数组(示例中仅列出2个,自行补充Array3到Array8) Array1=(1 2 3 4 5) Array2=(6 7 8 9 10) # Array3=(...) # ... # Array8=(...) # 创建关联数组,存储「数值→数组名」的映射 declare -A value_to_array # 遍历所有数组,填充映射关系 for arr_name in Array1 Array2 Array3 Array4 Array5 Array6 Array7 Array8; do # 获取当前数组的所有元素 eval "elements=(\"\${$arr_name[@]}\")" for num in "${elements[@]}"; do value_to_array["$num"]="$arr_name" done done # 配置输入输出文件路径 input_file="values.txt" # 存放待匹配数值的文件,每行一个数值 output_file="result.txt" # 存放结果的文件 # 清空输出文件(若需保留历史内容可删除此行) > "$output_file" # 遍历输入文件的每个数值,完成匹配并写入结果 while read -r num; do # 跳过空行 [[ -z "$num" ]] && continue # 查找对应数组名并输出 if [[ -n "${value_to_array[$num]}" ]]; then echo "$num ${value_to_array[$num]}" >> "$output_file" else # 可选:处理无匹配的情况,可根据需求修改或删除 echo "$num 未找到对应数组" >> "$output_file" fi done < "$input_file"
关键说明
- 映射构建:通过
eval动态获取每个数组的元素,将数值与所属数组名绑定到关联数组中,实现快速查找。 - 去重处理:如果同一个数值出现在多个数组中,脚本会保留最后一个遍历到的数组名;若需保留所有匹配的数组名,可将映射值改为数组拼接(比如
value_to_array["$num"]+="$arr_name ")。 - 环境要求:需要在支持关联数组的Bash环境(4.0及以上版本)运行,若用其他shell需调整语法。
内容的提问来源于stack exchange,提问作者Nitin Kumar
相关产品推荐
相关产品推荐

