>Использовать bash для этой задачи вообще не эффективно, тем более, что в
>конечном итоге опять таки используется bc, так почему просто не привести
>файл в удобный для bc вид. Но если хочется:
>for s in 1;do for i in `cat text` ;do echo -n
>"$i"+;done;echo 0;done |bc |*) for не нужен. back-ticks не нужен (больше ~130к файла не влезет).
Всё "как положено": awk быстрее, на bc точность не страдает...
$ cat ./x6
#!/bin/bash
n=10
for((i=1;i<8;i++)); do
yes | head -$n |sed 's!y!10000000000001!' | (\
{ echo "sum=0"; sed 's/.\+/sum+=\0/'; echo 'print sum," "'; } | /usr/bin/time bc
) 2>&1 |awk '{print '"$((${#n}-1))"'" "$1" "$2" "$4" "$5;exit}'
n="${n}0"
done
$ ./x6
1 100000000000010 0.00user 0:00.00elapsed 0%CPU
2 1000000000000100 0.00user 0:00.00elapsed 200%CPU
3 10000000000001000 0.00user 0:00.00elapsed 100%CPU
4 100000000000010000 0.03user 0:00.05elapsed 61%CPU
5 1000000000000100000 0.36user 0:00.63elapsed 57%CPU
6 10000000000001000000 3.86user 0:06.94elapsed 56%CPU
7 100000000000010000000 39.76user 1:12.61elapsed 55%CPU
$ cat ./x6a
#!/bin/bash
n=10
for((i=1;i<8;i++)); do
yes | head -$n |sed 's!y!10000000000001!' | (\
/usr/bin/time mawk 'BEGIN {c=0} {c=c+$0} END {printf("%.0f ", c)}'
) 2>&1 |awk '{print '"$((${#n}-1))"'" "$1" "$2" "$4" "$5;exit}'
n="${n}0"
done
$ ./x6a
1 100000000000010 0.00user 0:00.00elapsed 0%CPU
2 1000000000000100 0.00user 0:00.00elapsed 100%CPU
3 10000000000000900 0.00user 0:00.00elapsed 57%CPU
4 100000000000000912 0.00user 0:00.01elapsed 53%CPU
5 1000000000000001024 0.05user 0:00.15elapsed 38%CPU
6 10000000000000002048 0.48user 0:01.56elapsed 32%CPU
7 99999999978526310400 5.17user 0:15.50elapsed 34%CPU
$ _