112345D000000000000129
123456D000000000000129
112345C000000000000129
123456C000000000000129
123456C000000000000126
позиция 2-6 - это номер счета
позиция 7-22 - это сумма дебета или кредита, основанная на D или C в 7-й позиции
, для суммирования кредита иДебетовое значение для каждого аккаунта было опробовано
awk '{array[substr($0,7,1)]+=substr($0,8,15)+0} END{for(i in array){print array[i]}}')"
, но, поскольку размер файла огромен, требуется больше времени, и есть способ найти его еще быстрее
MVCE
fileA содержит номер счета + другая информация
fileB содержит приведенный выше пример с дебетовым кредитом
typeset -i stbal2
typeset -i endbal2
DONE=false
until $DONE; do
read s || DONE=true
accountnumber=${s:1:10} //account number
endbal=${s:26:1} //contain + or - sign
endbal1=${s:11:15} //balance
endbal2=$endbal1 //strip of leading zeros
endbal3=$endbal$endbal2 //concatenate the sign with balance
//similar process as above to get the start balance
stbal=${s:42:1}
stbal1=${s:27:15}
stbal2=$stbal1
stbal3=$stbal$stbal2
creditdebit="$(grep "${bban}" ${fileB} | awk '{array[substr($0,7,1)]+=substr($0,8,15)+0} END{for(i in array){print array[i]}}')"
set -- $creditdebit
... further logic
done < ${fileA}