Суммирование массива в скрипте bash не работает - PullRequest
1 голос
/ 18 марта 2020

У меня были проблемы с суммированием очень большого массива (миллионы чисел), и я пытался суммировать все значения внутри, но он продолжает давать сбой (давая мне 0 из исходного компонента). Ниже мой код:

Карта. sh

#/bin/bash

file="myfile.csv"
data=`tail -n +2 $file |  cut -d"," -f 4`
data1=()
for i in $data;
do
data1+=($i)
done;
count=${#data1[@]}
export count
export data1
export data
./reduce.sh

уменьшить. sh

#/bin/bash
echo $count
sum=0
for i in "${data1[@]}"; do
        sum = $((sum + $i))
done;
echo $sum

Я попробовал почти все переменные, которые я нашел в Интернете но никто не работает. Я что-то упустил?

пример данных: я смотрю на этот столбец (4): enter image description here

и он увеличивается на миллионы.

Ответы [ 2 ]

2 голосов
/ 18 марта 2020

С GNU datamash:

datamash --header-in -t',' sum 4 < myfile.csv

Это строит сумму значений четвертого поля разделенного запятыми входного файла. Строка заголовка пропущена.

2 голосов
/ 18 марта 2020

Будет ли работать этот awk для вас:

$ awk -F, '       # comma delimiter
FNR>1 {           # skip header record
    sum+=$4       # sum 4th field values to sum var
}
END {             # in the end
    print sum     # output the sum
}' file
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...