Arrays 使用Bash在数组中查找多个副本及其索引?
我有一个具有以下值的数组:Arrays 使用Bash在数组中查找多个副本及其索引?,arrays,linux,bash,Arrays,Linux,Bash,我有一个具有以下值的数组: list=("abc" "abcd" "abc" "abcde" "abcde" "abcdf" "abc") 是否有办法将重复项的索引放入另一个数组中,如: abc_position_list=(0, 2, 6) abcde_position_list=(3, 4) 我设法将所有索引放入一个数组中,但这样,您就不知道哪些索引具有相同的值 这是否可能与bash一起实现,或者python是否更合适?在python中: list_items = ["abc", "ab
list=("abc" "abcd" "abc" "abcde" "abcde" "abcdf" "abc")
是否有办法将重复项的索引放入另一个数组中,如:
abc_position_list=(0, 2, 6)
abcde_position_list=(3, 4)
我设法将所有索引放入一个数组中,但这样,您就不知道哪些索引具有相同的值
这是否可能与bash一起实现,或者python是否更合适?在python中:
list_items = ["abc", "abcd", "abc", "abcde", "abcde", "abcdf", "abc"]
counters = {}
for item in list_items:
if item not in counters:
counters[item] = [i for i, x in enumerate(list_items) if x == item ]
print counters
printf“%s\n”${list[@]}
-将数组打印为换行分隔的元素nl-w1
-为每个元素添加另一列-编号sort-k2
根据值对列表进行排序uniq-f1-D
-打印重复的元素,忽略第一列1 abc
3 abc
7 abc
4 abcde
5 abcde
现在是创建阵列的时候了。因为您希望从列表中提取数组名,所以我想我们必须使用eval
读取结果列表
printf "%s\n" "${list[@]}" | nl -w1 | sort -k2 | uniq -f1 -D |
{
while read -r n v; do
eval "${v}_position_list+=(\"\$n\")";
done;
declare -p abc_position_list abcde_position_list;
}
将使声明-p
输出两个数组声明:
declare -a abc_position_list=([0]="1" [1]="3" [2]="7")
declare -a abcde_position_list=([0]="4" [1]="5")
这回答了你的问题吗<代码>0、2、6-是否希望数组中的元素带有逗号?@KamilCuk不,对不起,不带逗号。如果需要在数据结构上执行大量工作,请使用其他语言。
bash
数组只适合于存储一系列项作为另一个命令的参数。
declare -a abc_position_list=([0]="1" [1]="3" [2]="7")
declare -a abcde_position_list=([0]="4" [1]="5")