arrays - 从文件创建的 Bash 数组不会创建字符串索引
问题描述
我正在使用 while 循环从文件读取到数组中,并尝试使用文件中的第一列值创建一个键,该值是一个字符串。它不起作用,我得到的只是一个 0 的键值。如果我选择使用包含数字的列,则可以毫无问题地创建一个键。
这是输入文件的外观。col1 中有更多的行和其他值:
AING,AING1759342196,00002570,0007816,20087120
AING,AING4392227425,00003550,0009948,35315400
AING,AING4861992028,00001760,0004552,8011520
AING,AING4995735686,00004550,0009858,44853900
AING,AING5727938304,00004870,0007298,35541260
AING,AING5919379575,00002220,0003603,7998660
AING,AING6374702721,00004640,0009451,43852640
AING,AING6434550362,00003000,0002409,7227000
AING,AING8139382011,00003450,0007461,25740450
AING,AING8175209012,00003330,0006350,21145500
BANK,BANK2329856527,00003830,0009947,38097010...
这是我正在使用的脚本:
unset c1 c2 c3 c4 c5 sumVol sumTurn
while IFS=, read c1 c2 c3 c4 c5; do c4=`echo $c4|sed 's/^0*//'`; echo $c1 $c2 $c3 $c4 $c5; ((sumTurn[$c1]+=c5)); ((sumVol[$c1]+=c4)); done < inputFile.csv
for i in ${!sumTurn[@]}; do echo $i,${sumTurn[$i]}; done
我得到的结果是这样的:
0,759144390
...这是第 5 列的总和,我真的希望将其拆分为应该在第 1 列中使用的键。如果我用第 4 列(一个数字)替换 sumVol 键列,它会创建一个数组,但是显然不是我需要的!
427,956480
639,1361070
1033,4090680
1422,1948140
1847,4968430
...
有人可以指出我做错了什么吗?
谢谢
斯图尔特
解决方案
您只需要等作为关联数组:declare
sumTurn
declare -A sumTurn sumVol
推荐阅读
- javascript - 如何以编程方式设置angular js中的选择?
- c# - C# - 如何将字节值保存到尽可能小的文件中?
- json - GoPro/Powershell:尝试读取 .json 状态文件时违反协议
- php - Laravel 作业 cron 不工作
- c# - 返回一个 IHttpActionResult
- java - Java BufferedReader 行为怪异
- java - 从java中的postgres存储过程中获取结果集
- apache-camel - 在 Apache Karaf 4.2.0 中部署骆驼弹簧应用程序
- asp.net-mvc - Select2 搜索框值张贴在表单提交偶数不匹配
- python - Django 扩展模型