Есть много файлов типа:
файл 1:
2 | data1 | data2 | 0 | 200 | 0 | 0 | 11
30 | data3 | data4 | 0 | 656 | 676 | 12 | 0
файл 2:
1 | data5 | data6 | 2 | 45 | 86 | 0 | 0
2 | data1 | data2 | 0 | 343 | 0 | 0 | 11
30 | data3 | data4 | 0 | 565 | 676 | 12 | 0
и необходимо посчитать для всех строк с одинаковым первым полем (например 30) сумму всех чисел в поле номер 5 для данных строк.
например, для строк начинающихся на 30 это будет сумма 656 + 565 = 1221. А для номера 2 сумма соответственно 343 + 200 = 543. После чего нужно вывести строку с максимальной суммой в формате на примере строки 30: "30 data3 data4 1221".
Можно использовать только команды: printf, echo, wc, tail, head, grep, sort, uniq, cut, tee, tr, read, временные файлы создавать нельзя.
Я битый час делал этот скрипт, но он считает неправильно: если на входе файл, то он тупо считает сумму поля для всех строк в файле, а мне надо как описано выше..
Как это сделать (точнее, что поправить, чтобы работало)?
#! /bin/bash
function findMax {
for file in $* ; do
cat $file | tr '|' ' ' | sort -bd | calcSums
done
}
function calcSumForSimilar {
local sum_for_similarc=0
while read -a line ; do
let sum_for_similar+=${line[4]}
done
echo $sum_for_similar
}
function calcSums {
while read -a line; do
sum=$(cat "${line[@]}" | grep ${line[0]} | calcSumForSimilar)
done
echo ${line[0]} ${line[1]} ${line[2]} $sum
}
findMax $*
Спасибо!