基于另一个关联数组制作关联数组

MF94

我制作了一个关联数组,如下所示。为了提供一些细节,键是指特定文件,因为我将在更大脚本的上下文中使用这个数组(其中包含文件的目录将是一个 getopts 参数)。

declare -A BAMREADS
echo "BAMREADS array is initialized"

BAMREADS[../data/file1.bam]=33285268
BAMREADS[../data/file2.bam]=28777698
BAMREADS[../data/file3.bam]=22388955

echo ${BAMREADS[@]}  # Output: 22388955 33285268 28777698
echo ${!BAMREADS[@]} # Output: ../data/file1.bam ../data/file2.bam ../data/file3.bam

到目前为止,这个数组的行为似乎符合我的预期。现在,我想基于这个数组构建另一个关联数组。具体来说:我的第二个数组将具有与第一个相同的键,但我想将这些值除以名为 $MIN 的变量。

我不确定以下哪种策略是最好的,而且我似乎无法使任何一种工作。

策略1:复制数组并修改数组?

MIN=33285268

declare -A BRAMFRACS
echo "BAMFRACS array is initialized"
BAMFRACS=("${BAMREADS[@]}")

echo ${BAMFRACS[@]}  # Output: 22388955 33285268 28777698
echo ${!BAMFRACS[@]} # Output: 0 1 2

这不是我想要的钥匙。即使它有效,我也需要对所有值执行我提到的操作。

策略 2:在循环第一个数组时构建第二个数组。

MIN=33285268

declare -A BRAMFRACS
echo "BAMFRACS array is initialized"

for i in $(ls $BAMFILES/*bam)
do
    echo $i
    echo ${BAMREADS[$i]}
    BAMFRACS[$i] = ${BAMREADS[$i]} 
done

echo ${BAMFRACS[@]}
echo ${!BAMFRACS[@]}


# When I run this, I get the following error which I am unsure how to solve:

../data/file1.bam
33285268
script.bash: line 108: BAMFRACS[../data/file1.bam]: No such file or directory
../data/file2.bam
28777698
script.bash: line 108: BAMFRACS[../data/file2.bam]: No such file or directory
../data/file3.bam
22388955

UPDATE更新了 strategy2,它的输出更清晰。谢谢

卡达克

同时

declare -A BRAMFRACS

应该

declare -A BAMFRACS

也就是说,名称中有一个额外的“R”,其中一个错误的原因是它BAMFRACS是一个索引数组(默认值),而不是关联数组。

在策略 2 中:

BAMFRACS[$i] = ${BAMREADS[$i]} 

应该

BAMFRACS[$i]=${BAMREADS[$i]

也就是说,周围=不允许有空格BAMFRACS[$i]被视为命令,因为命令由空格分隔。

顺便一提,

for i in $(ls $BAMFILES/*bam) 

可以写成:

for i in "$BAMFILES"/*bam

尝试:

MIN=33285268

declare -A BAMFRACS

for key in "${!BAMREADS[@]}"
do
    val=${BAMREADS[$key]}
    BAMFRACS[$key]=$((val/MIN))
done

echo ${BAMFRACS[@]}  
echo ${!BAMFRACS[@]} 

给出:

1 0 0
../data/file1.bam ../data/file2.bam ../data/file3.bam

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

根据另一个关联数组制作关联数组

如何基于另一个数组中的条件从关联数组中提取?

将关联数组添加到PHP中的另一个关联数组

如何制作一个唯一的关联数组?

检查数组的所有项目是否在另一个关联数组中可用?

从另一个数组返回PHP中的关联数组的函数

使用另一个数组作为键创建关联数组

在现有数组中创建另一个关联数组

如何将关联数组附加到另一个数组的末尾?

使用一个关联数组中的值来测试另一个关联数组中的值

在Bash中访问JSON对象-关联数组/列表/另一个模型

bash:将关联数组作为参数传递给另一个脚本

声明关联数组时尝试访问另一个字段

Shell 脚本:将关联数组传递给另一个 Shell 脚本

解析关联数组以根据另一个索引的值显示所有值

另一个对象的值作为Javascript中另一个关联数组中的值

使用一个多维关联数组对另一个多维数组进行计数或求和

如何通过继续增加键将关联添加到另一个关联数组中?

将关联数组推为一个关联数组

将一个关联数组转换为一个关联数组,该关联数组具有一个键,该键中的另一个关联数组作为键在php中的值

PHP 如何将关联数组(不是它的值)推送到另一个数组?

如何将关联数组项递归复制到另一个单个数组项?

从2个输入创建一个关联数组

给关联数组codeigniter指定一个索引名

在Rust中创建一个关联数组

自然排序一个关联数组?

在jQuery中创建一个关联数组

创建一个键匹配值的关联数组

如何遍历一个关联数组并获取密钥?