【问题标题】:Bash array created from file won't create a string index从文件创建的 Bash 数组不会创建字符串索引
【发布时间】:2020-05-29 02:56:40
【问题描述】:

我正在使用 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
...

谁能指出我做错了什么?

谢谢

斯图尔特

【问题讨论】:

  • 你能给出你期望的输出示例吗?
  • 我基本上是在尝试对第 1 列进行分组,显示第 4 列的总和和第 5 列的总和。是的,我知道我应该使用 SQL 或 Excel 或任何其他方法!

标签: arrays bash while-loop


【解决方案1】:

您只需要将declare sumTurn 等作为关联数组:declare -A sumTurn sumVol

【讨论】:

    【解决方案2】:

    为什么会这样?

    cat input.csv
    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
    
    awk 'BEGIN{FS=OFS=","}{a[$1]+=$5}END{ for (i in a) print i,a[i]}' input.csv
    

    输出

    BANK,38097010
    AING,249773450
    

    虽然不清楚你在用第 4 列做什么(例如),但我认为你还是明白了

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      相关资源
      最近更新 更多