在 bash (>4.0) 中将多个文件读入关联数组

佩德罗·克鲁兹

我是 bash 中关联数组的新手,所以如果我在某处听起来很傻,请原谅我。假设我正在阅读一个大文件并使用 bash(版本 = 4.2.46)关联数组来存储基因的 FDR 值。对于一个文件,我只是在做:

declare -A array

while read ID GeneID geneSymbol chr strand exonStart_0base exonEnd upstreamES upstreamEE downstreamES downstreamEE ID IJC_SAMPLE_1 SJC_SAMPLE_1 IJC_SAMPLE_2 SJC_SAMPLE_2 IncFormLen SkipFormLen PValue FDR IncLevel1 IncLevel2 IncLevelDifference; do 
    array[$geneSymbol]="${array[$geneSymbol]}${array[$geneSymbol]:+,}$FDR" ; 
done < input.txt

这将存储我可以通过执行打印的 FDR 值

    for key in "${!array[@]}"; do echo "$key->${array[$key]}"; done 

# Prints out
"ABHD14B"->0.285807588279,0.898327660004,0.820468496328
"DHFR"->0.464931314555,0.449582575347
...

我天真地尝试通过我的数组读取几个文件

declare -A array

find ./aligned.filtered/rMAT*/MATS_output/SE.MATS.JunctionCountOnly.txt  -type f -exec cat {} + | 

while read ID GeneID geneSymbol chr strand exonStart_0base exonEnd upstreamES upstreamEE downstreamES downstreamEE ID IJC_SAMPLE_1 SJC_SAMPLE_1IJC_SAMPLE_2 SJC_SAMPLE_2 IncFormLen SkipFormLen PValue FDR IncLevel1 IncLevel2 IncLevelDifference; 
do  array[$geneSymbol]="${array[$geneSymbol]}${array[$geneSymbol]:+,}$FDR" ;  
done

但在这种情况下,我的数组最终为空。我当然可以将我需要的所有文件都放在一个文件中,然后将它们保存到一个文件中,我可以像上面一样使用,但是知道如何创建一个关联数组来存储来自多个不同文件的数据会很好。

非常感谢你!

切普纳

您一开始可能不应该这样做bash,但是您的主要问题是while循环在管道诱导子shell 中运行使用过程替换来反转关系。

(此外,不要为您实际上不使用的所有字段命名;只需将该行拆分为一个索引数组,然后挑选出您真正需要的两个字段即可。)

while read -a fields; do
  geneSymbol=${fields[1]}
  FDR=${fields[...]}   # some number; i'm not counting
  array[$geneSymbol]="${array[$geneSymbol]}${array[$geneSymbol]:+,}$FDR"
done < <(find ./aligned.filtered/rMAT*/MATS_output/SE.MATS.JunctionCountOnly.txt  -type f -exec cat {} +)

find可能没有必要;只需将您的while循环放入for循环中:

for f in ./aligned.filtered/rMAT*/MATS_output/SE.MATS.JunctionCountOnly.txt; do
  while read -a fields; do
    ...
  done < "$f"
done

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

bash4将文件读入关联数组

来自分类Dev

将Bash中的CSV读入字典/关联数组

来自分类Dev

如何使用 Bash 4 将 CSV 数据转换为关联数组?

来自分类Dev

在bash中将命令输出拆分为关联数组

来自分类Dev

存储Bash关联数组

来自分类Dev

BASH关联数组打印

来自分类Dev

BASH关联数组打印

来自分类Dev

在 Bash 中将分隔的多行字符串文件读入多个数组

来自分类Dev

Bash将2个文件转换为关联数组

来自分类Dev

将关联数组的内容打印到 bash 中的文件

来自分类Dev

bash-在bash脚本中将getopts与关联数组一起使用

来自分类Dev

bash和for循环中的关联数组

来自分类Dev

bash中来自querystring的关联数组?

来自分类Dev

bash中的嵌套关联数组

来自分类Dev

Bash对关联数组的间接引用

来自分类Dev

动态bash关联数组键

来自分类Dev

从字符串Bash关联数组?

来自分类Dev

在bash中动态创建关联数组

来自分类Dev

在Makefile中迭代bash关联数组

来自分类Dev

BASH关联数组重排键

来自分类Dev

在 CMake 中使用 Bash 关联数组

来自分类Dev

在Bash中循环访问多个数组时,关联数组键中的空格

来自分类Dev

在bash中将键值列表转换为关联数组的最佳代码模式是什么?

来自分类Dev

在foreach中将数据插入关联数组

来自分类Dev

在 JavaScript 中将值推入关联数组

来自分类Dev

检查多个bash数组是否为gt 0

来自分类Dev

如何在bash中将文件读入矩阵?

来自分类Dev

从包含冒号分隔符的文件创建bash关联数组

来自分类Dev

从bash关联数组键解压缩文件列表