如何解决如何在bash中迭代两个数组中的元素组合?
我有 2 个不同的列表,我将它们分开在 2 个不同的文件中。
# cat file1
S1
S2
S3
和
# cat file2
R1
R2
R3
我想遍历这两个文件,所以在第一个循环中,S1
对 file2 中的元素进行所有可能的组合,就像这样
echo "First List Of Combinations"
echo S1 + R1
echo S1 + R2
echo S1 + R3
然后是第二个组合
echo "Second List Of Combinations"
echo S2 + R1
echo S2 + R2
echo S2 + R3
所以我决定把它们放在两个数组中。
arr1 = $(cat file1)
arr2 = $(cat file2)
我应该先读什么,应该增加什么?我知道这将包括 2 个 while 循环从两个数组中读取元素。
解决方法
Bustkiller 的固定答案,
#!/usr/bin/env bash
# Properly reading file lines into arrays
mapfile -t arr1 <file1
mapfile -t arr2 <file2
# Iterating the index of arr1
for i in "${!arr1[@]}"
do
# Properly formatted print-out of combination index with arr1 element
printf 'List of combinations #%d\n' "$((i + 1))"
# Iterating the index of arr2
for j in "${!arr2[@]}"
do
# Properly formatting the combinations of elements from both arrays by index
printf '%s + %s\n' "${arr1[i]}" "${arr2[j]}"
done
done
# Properly formatting the total computed number of combinations that is:
# number of elements in array1 times number of elements in array2
printf 'Total number of combinations: %d\n' "$((${#arr1[@]} * ${#arr2[@]}))"
,
替代数组和映射文件,只需 2 个循环:
String
,
以下脚本应该可以工作:
#!/usr/bin/env bash
arr1=$(cat file1)
arr2=$(cat file2)
combinations_counter=1
for i in $arr1
do
echo "List of combinations #$combinations_counter"
for j in $arr2
do
echo "$i + $j"
done
((combinations_counter++))
done
使用提供的 file1
和 file2
文件,结果将是:
List of combinations #1
S1 + R1
S1 + R2
S1 + R3
List of combinations #2
S2 + R1
S2 + R2
S2 + R3
List of combinations #3
S3 + R1
S3 + R2
S3 + R3
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。