<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Сложить массив чисел на bash</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html</link>
    <description>Есть файл вида&lt;br&gt;&lt;br&gt;$cat total.bytes&lt;br&gt;1962647280&lt;br&gt;154580283&lt;br&gt;85368270&lt;br&gt;256233601&lt;br&gt;2448176455&lt;br&gt;3211021168&lt;br&gt;392011779&lt;br&gt;.........&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;т.е просто числа на каждой строке&lt;br&gt;нужно просуммировать их все - чтоб на выходе было одно число.&lt;br&gt;Я не нашел какой-нибудь встроенной функции для подсчета такого массива, и написал скрипт:&lt;br&gt;&lt;br&gt;#!/bin/sh&lt;br&gt;cat total.bytes &amp;#124; &#092;&lt;br&gt;while read line;&lt;br&gt;do&lt;br&gt;let y=y+line;&lt;br&gt;done&lt;br&gt;echo $y&lt;br&gt;&lt;br&gt;&lt;br&gt;скрипт выводит&lt;br&gt;&lt;br&gt;$./add.sh&lt;br&gt;1962647280&lt;br&gt;2117227563&lt;br&gt;-2092371463&lt;br&gt;-1836137862&lt;br&gt;311345785&lt;br&gt;-1836137864&lt;br&gt;-1444126085&lt;br&gt;-710494993&lt;br&gt;1436988654&lt;br&gt;-1190184973&lt;br&gt;&lt;br&gt;Т.е первые два числа сложил, а потом почему-то минусы какие-то появляются&lt;br&gt;что делаю не так?&lt;br&gt;&lt;br&gt;</description>

<item>
    <title>а сертифицированные BSDA читают книги (angra)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html#29</link>
    <pubDate>Mon, 01 Jun 2009 20:52:27 GMT</pubDate>
    <description>&amp;gt;&amp;#124;*) for не нужен. back-ticks не нужен (больше ~130к файла не влезет). &lt;br&gt;&lt;br&gt;Андрей, неужели ты думаешь, что я делаю так как написал. Была мысль показать while read с перенаправлением, но ведь объяснять бы пришлось. Задача была показать в простом виде как избавится от множественных вызовов bc(или любой другой программы) в подобных случаях, как следствие внес минимум изменений в код из книжки(про умственную отсталость автора книги отдельный разговор). &lt;br&gt;Мое отношение к башу в такой задаче я в любом случае выразил однозначно. &lt;br&gt;</description>
</item>

<item>
    <title>а сертифицированные BSDA читают книги (Andrey Mitrofanov)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html#28</link>
    <pubDate>Mon, 01 Jun 2009 13:25:59 GMT</pubDate>
    <description>&amp;gt;Использовать bash для этой задачи вообще не эффективно, тем более, что в &lt;br&gt;&amp;gt;конечном итоге опять таки используется bc, так почему просто не привести &lt;br&gt;&amp;gt;файл в удобный для bc вид. Но если хочется: &lt;br&gt;&amp;gt;for s in 1;do for i in &#096;cat text&#096; ;do echo -n &lt;br&gt;&amp;gt;&quot;$i&quot;+;done;echo 0;done &amp;#124;bc &lt;br&gt;&lt;br&gt;&amp;#124;*) for не нужен. back-ticks не нужен (больше ~130к файла не влезет).&lt;br&gt;Всё &quot;как положено&quot;: awk быстрее, на bc точность не страдает...&lt;br&gt;&lt;br&gt;$ cat ./x6&lt;br&gt;#!/bin/bash&lt;br&gt;&lt;br&gt;n=10&lt;br&gt;for((i=1;i&amp;lt;8;i++)); do&lt;br&gt;yes &amp;#124; head -$n &amp;#124;sed &apos;s!y!10000000000001!&apos; &amp;#124; (&#092;&lt;br&gt;&#091;B&#093;&#123; echo &quot;sum=0&quot;; sed &apos;s/.&#092;+/sum+=&#092;0/&apos;; echo &apos;print sum,&quot; &quot;&apos;; &#125; &amp;#124; /usr/bin/time bc&#091;/B&#093;&lt;br&gt;&lt;br&gt;) 2&amp;gt;&amp;1 &amp;#124;awk &apos;&#123;print &apos;&quot;$(($&#123;#n&#125;-1))&quot;&apos;&quot; &quot;$1&quot; &quot;$2&quot; &quot;$4&quot; &quot;$5;exit&#125;&apos;&lt;br&gt;n=&quot;$&#123;n&#125;0&quot;&lt;br&gt;done&lt;br&gt;$ ./x6&lt;br&gt;1 100000000000010 0.00user 0:00.00elapsed 0&#037;CPU&lt;br&gt;2 1000000000000100 0.00user 0:00.00elapsed 200&#037;CPU&lt;br&gt;3 10000000000001000 0.00user 0:00.00elapsed 100&#037;CPU&lt;br&gt;4 100000000000010000 0.03user 0:00.05elapsed 61&#037;CPU&lt;br&gt;5 1000000000000100000 0.36user 0:00.63elapsed 57&#037;CPU&lt;br&gt;6 10000000000001000000 3.8</description>
</item>

<item>
    <title>Сложить массив чисел на bash (angra)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html#27</link>
    <pubDate>Sun, 31 May 2009 04:28:42 GMT</pubDate>
    <description>Использовать bash для этой задачи вообще не эффективно, тем более, что в конечном итоге опять таки используется bc, так почему просто не привести файл в удобный для bc вид. Но если хочется:&lt;br&gt;for s in 1;do for i in &#096;cat text&#096; ;do echo -n &quot;$i&quot;+;done;echo 0;done &amp;#124;bc&lt;br&gt;</description>
</item>

<item>
    <title>Сложить массив чисел на bash (anonymous)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html#26</link>
    <pubDate>Sat, 30 May 2009 02:01:56 GMT</pubDate>
    <description>&amp;gt;Просто и эффектно.&lt;br&gt;&lt;br&gt;Ни разу не эффективно на каждое сложение запускать новый процесс bc.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Сложить массив чисел на bash (Andrew)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html#25</link>
    <pubDate>Fri, 29 May 2009 19:57:18 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;sum=0 &lt;br&gt;&amp;gt;for num in &#096;cat ./total.bytes&#096;; do &lt;br&gt;&amp;gt;    sum=&#096;echo $sum+$num &amp;#124; bc&#096; &lt;br&gt;&amp;gt;done &lt;br&gt;&amp;gt;echo $sum &lt;br&gt;&amp;gt;$ ./count &lt;br&gt;&amp;gt;8510038836 &lt;br&gt;&amp;gt;Просто и эффектно. Кстати этот скрипт также будет обрабатывать числа, даже если &lt;br&gt;&amp;gt;они введены в файле через пробелы или табуляцию. А программа bc &lt;br&gt;&amp;gt;работает и с числами с десятичной точкой. &lt;br&gt;&lt;br&gt;Блин.... только хотел написать про bc, оказалось уже в цитате написано. А если по существу, если вы покурите man bc более вдумчиво, решение выйдет еще более элегантное.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>и, кстати, &apos;больше&apos; не работает :/ (Andrey Mitrofanov)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html#24</link>
    <pubDate>Thu, 28 May 2009 14:22:14 GMT</pubDate>
    <description>&amp;gt;bc &amp;lt;(echo &apos;sum=0;while((val=read())!=0)&#123;sum+=val&#125;; sum&apos;) &lt;br&gt;&lt;br&gt;Обновился с Debian 4.0 &quot;Etch&quot; на Debian 5.0 &quot;Lenny&quot; (bc 1.06-20 -&amp;gt; 1.06.94-3, bash 3.1dfsg-8 -&amp;gt; 3.2-4 и проч.) и это заклинание больше не работает. &quot;=read())!=0&quot; в нём костыль, конечно, по сравнению с &quot;while read val; do&quot; в bash-е: конец файла от числа 0 не отличает. А в Lenny и вообще не работает...&lt;br&gt;</description>
</item>

<item>
    <title>Сложить массив чисел на bash (krigs)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html#23</link>
    <pubDate>Sun, 24 May 2009 23:31:41 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;-1836137862 &lt;br&gt;&amp;gt;311345785 &lt;br&gt;&amp;gt;-1836137864 &lt;br&gt;&amp;gt;-1444126085 &lt;br&gt;&amp;gt;-710494993 &lt;br&gt;&amp;gt;1436988654 &lt;br&gt;&amp;gt;-1190184973 &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;Т.е первые два числа сложил, а потом почему-то минусы какие-то появляются &lt;br&gt;&amp;gt;что делаю не так? &lt;br&gt;&lt;br&gt;Только что наткнулся на книгу Евгения Миньковского (http://house.hcn-strela.ru/BSDCert/BSDA-course/index.html) - там и почерпнул идею :)&lt;br&gt;&lt;br&gt;$ cat count&lt;br&gt;#!/bin/sh                                                     &lt;br&gt;sum=0                          &lt;br&gt;for num in &#096;cat ./total.bytes&#096;; do   &lt;br&gt;    sum=&#096;echo $sum+$num &amp;#124; bc&#096;&lt;br&gt;done                           &lt;br&gt;echo $sum&lt;br&gt;$ ./count&lt;br&gt;8510038836&lt;br&gt;Просто и эффектно. Кстати этот скрипт также будет обрабатывать числа, даже если они введены в файле через пробелы или табуляцию. А программа bc работает и с числами с десятичной точкой.&lt;br&gt;</description>
</item>

<item>
    <title>Сложить массив чисел на bash (0dmin)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html#22</link>
    <pubDate>Tue, 03 Mar 2009 20:00:32 GMT</pubDate>
    <description>&amp;gt;&amp;gt;О, а если bash поставить, то работает!Дело в sh значит &lt;br&gt;&amp;gt;однако суровый sh в freebsd :)) &lt;br&gt;&lt;br&gt;Номальный POSIX Shell. &lt;br&gt;&lt;br&gt;PS: А да - во фряхе _внезапно!_ bash зовётся bash&apos;ем а не sh :)&lt;br&gt;</description>
</item>

<item>
    <title>Сложить массив чисел на bash (vic)</title>
    <link>https://www.opennet.me/openforum/vsluhforumID9/8117.html#21</link>
    <pubDate>Tue, 03 Mar 2009 15:12:22 GMT</pubDate>
    <description>у меня и &#037;d работает в этом решении&lt;br&gt;</description>
</item>

</channel>
</rss>
