<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: awk быстрее perl ?</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html</link>
    <description>..или это я ещё совсем зелёный?&lt;br&gt;&lt;br&gt;есть задачка:&lt;br&gt;из файла:&lt;br&gt;Name: network1&lt;br&gt;Dropped packets: 15618&lt;br&gt;Dropped packets for IPv6: 27&lt;br&gt;Dropped packets: 74&lt;br&gt;Dropped packets for IPv6: 0&lt;br&gt;Failed RADIUS Authentication procedures: 0&lt;br&gt;Failed RADIUS Accounting procedures: 0&lt;br&gt;Name: network2&lt;br&gt;Dropped packets: 1117&lt;br&gt;Dropped packets for IPv6: 0&lt;br&gt;Dropped packets: 0&lt;br&gt;Dropped packets for IPv6: 0&lt;br&gt;Failed RADIUS Authentication procedures: 0&lt;br&gt;Failed RADIUS Accounting procedures: 0&lt;br&gt;&lt;br&gt;сделать:&lt;br&gt;network1:15618:27:74:0:0:0&lt;br&gt;network2:1117:0:0:0:0:0&lt;br&gt;&lt;br&gt;файл, соот-но, увеличить до мегов 300 (я на таком тестил) банальным размножением блоков по 7 строк..&lt;br&gt;&lt;br&gt;решение на awk:&lt;br&gt;awk -F&apos;: *&apos; &apos; &#123; r = r ? r &quot;:&quot; $2 : $2 &#125; /^Failed RADIUS Accounting procedures/&#123; print r; r = 0 &#125; &apos; infile &amp;gt; outfile&lt;br&gt;&lt;br&gt;голову грел больше 2х часов, но максимум, чего добился, это вот такого решения на perl:&lt;br&gt;#!/usr/bin/perl -w&lt;br&gt;&lt;br&gt;open(FH,&quot;infile&quot;);&lt;br&gt;open(NEW,&quot;&amp;gt;outfile&quot;);&lt;br&gt;while(&amp;lt;FH&amp;gt;)&#123;&lt;br&gt;    if(/: (network&#092;d+?)$/)&#123;print NEW &quot;&#092;n$1&quot;;next&#125;&lt;br&gt;    /: (&#092;d+)$/;print NEW &quot;:$1&quot;&lt;br&gt;</description>

<item>
    <title>awk быстрее perl ? (greenwar)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html#9</link>
    <pubDate>Sat, 29 May 2010 07:25:49 GMT</pubDate>
    <description>тэкс, тут появилась ещё одна непонятка.. теперь PHP быстрее Perl на регулярках ^^&lt;br&gt;поможете разобраться в причинах?&lt;br&gt;&lt;br&gt;&amp;lt;?php&lt;br&gt;$fp = fopen(&apos;text.txt&apos;, &apos;rt&apos;);&lt;br&gt;while (!feof($fp)) &#123;&lt;br&gt;  $str = fgets($fp);&lt;br&gt;  for($i=0; $i&amp;lt;100; $i++) &#123;&lt;br&gt;    $pattern_str = rand(100, 1000);&lt;br&gt;    preg_match_all(&apos;/&apos;.$pattern_str.&apos;/&apos;, $str, $out);&lt;br&gt;  &#125;&lt;br&gt;&#125;&lt;br&gt;?&amp;gt;&lt;br&gt;&lt;br&gt;в 3 раза быстрее, чем:&lt;br&gt;&lt;br&gt;#!/usr/bin/perl -w&lt;br&gt;&lt;br&gt;while(&amp;lt;&amp;gt;)&#123; # обрабатываем построчно указанный файл. формат запуска скрипта: time ./script textfile&lt;br&gt;&lt;br&gt;    for(0..99)&#123; # цикл на 10к раз. в каждой строке 10000 раз ищем рандомное число от 100 до 1000&lt;br&gt;        $searchline=(int rand(901)+100); # строка для поиска: рандомное целое число от 100 до 1000&lt;br&gt;        $_=~/$searchline/g; # ищем регекспом с продолжением поиска по строке после 1го совпадения&lt;br&gt;    &#125;&lt;br&gt;&#125;&lt;br&gt;&lt;br&gt;в качестве файла берётся обычный 20-меговый архив или бинарник или текстовик&lt;br&gt;</description>
</item>

<item>
    <title>awk быстрее perl ? (greenwar)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html#8</link>
    <pubDate>Mon, 16 Nov 2009 09:09:23 GMT</pubDate>
    <description>&amp;gt;согласен, изначально был chomp, в ходе эксперимента заменил на chop, выиграл 1 &lt;br&gt;&amp;gt;сек &lt;br&gt;&lt;br&gt;странно.. по идее работают по одному принципу&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;  $_  = substr( $_, index($_,&apos;:&apos;)+2 );&lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;а где гарантия, что будет именно 2 символа в конце строки? даже &lt;br&gt;&amp;gt;&amp;gt;в примере есть далеко не 2 &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;тут не то, ищем где стоит дветочие и отрезаем его и пробел &lt;br&gt;&amp;gt;за ним &lt;br&gt;&amp;gt;т.е. убираем название параметра, оставляя только значение &lt;br&gt;&lt;br&gt;а index и регекспы разными механизмами находят двоеточие в строке?&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt;так и регуляркой можно было строгать треть строк мимо.. было бы быстрее &lt;br&gt;&amp;gt;&amp;gt;:) &lt;br&gt;&amp;gt;&amp;gt;к тому же, вы несложную регулярку на 3 функции заменили.. шило на &lt;br&gt;&amp;gt;&amp;gt;мыло имхо &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;7 сек из 29 = 24&#037;, далеко не шило &lt;br&gt;&amp;gt;в регулярке больше работает комп, в моем случае - программист &lt;br&gt;&lt;br&gt;хорошо, если так, но пока не ясно, откуда такая большая разница между index и регекспом. ищут одно и тоже, а механизмы настолько разные?&lt;br&gt;полезная тема для познания дао оптимизации&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt;  if( ord($_) == 110 ) &#123; &lt;br&gt;&amp;gt;&amp;gt;&lt;br&gt;&amp;gt;&amp;gt;регуляркой это: /: &#092;D+$/&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;нет, это </description>
</item>

<item>
    <title>awk быстрее perl ? (Vladin)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html#7</link>
    <pubDate>Sun, 15 Nov 2009 13:48:47 GMT</pubDate>
    <description>&amp;gt;&amp;gt;  chop;&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;плохая привычка чопать конец строки, можно чопнуть чего-нить нужное &lt;br&gt;&amp;gt;лучше чомпать (chomp) &lt;br&gt;&lt;br&gt;согласен, изначально был chomp, в ходе эксперимента заменил на chop, выиграл 1 сек&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt;  $_  = substr( $_, index($_,&apos;:&apos;)+2 );&lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;а где гарантия, что будет именно 2 символа в конце строки? даже &lt;br&gt;&amp;gt;в примере есть далеко не 2 &lt;br&gt;&lt;br&gt;тут не то, ищем где стоит дветочие и отрезаем его и пробел за ним&lt;br&gt;т.е. убираем название параметра, оставляя только значение&lt;br&gt;&lt;br&gt;&amp;gt;так и регуляркой можно было строгать треть строк мимо.. было бы быстрее &lt;br&gt;&amp;gt;:) &lt;br&gt;&amp;gt;к тому же, вы несложную регулярку на 3 функции заменили.. шило на &lt;br&gt;&amp;gt;мыло имхо &lt;br&gt;&lt;br&gt;7 сек из 29 = 24&#037;, далеко не шило&lt;br&gt;в регулярке больше работает комп, в моем случае - программист&lt;br&gt;&lt;br&gt;&amp;gt;&amp;gt;  if( ord($_) == 110 ) &#123; &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;регуляркой это: /: &#092;D+$/&lt;br&gt;&lt;br&gt;нет, это проверка что первый символ в строке равен &apos;n&apos;&lt;br&gt;взято из идеологии си, там строка является массивом и работает конструкция string&#091;0&#093; == &apos;n&apos;&lt;br&gt;</description>
</item>

<item>
    <title>awk быстрее perl ? (greenwar)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html#6</link>
    <pubDate>Sun, 15 Nov 2009 12:26:30 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;open(NEW,&quot;&amp;gt;outfile&quot;);&lt;br&gt;&amp;gt;while(&amp;lt;FH&amp;gt;)&#123;&lt;br&gt;&amp;gt;  chop; &lt;br&gt;&amp;gt;  $_  = substr( $_, index($_,&apos;:&apos;)+2 ); &lt;br&gt;&amp;gt;  if( ord($_) == 110 ) &#123; &lt;br&gt;&amp;gt;    print NEW &quot;&#092;n$_&quot;; &lt;br&gt;&amp;gt;    next; &lt;br&gt;&amp;gt;  &#125; &lt;br&gt;&amp;gt;  print NEW &quot;:$_&quot;; &lt;br&gt;&amp;gt;&#125; &lt;br&gt;&lt;br&gt;чё-то ляпов многовато..&lt;br&gt;&lt;br&gt;&amp;gt;  chop;&lt;br&gt;&lt;br&gt;плохая привычка чопать конец строки, можно чопнуть чего-нить нужное&lt;br&gt;лучше чомпать (chomp)&lt;br&gt;&lt;br&gt;&amp;gt;  $_  = substr( $_, index($_,&apos;:&apos;)+2 );&lt;br&gt;&lt;br&gt;а где гарантия, что будет именно 2 символа в конце строки? даже в примере есть далеко не 2&lt;br&gt;&lt;br&gt;так и регуляркой можно было строгать треть строк мимо.. было бы быстрее :)&lt;br&gt;к тому же, вы несложную регулярку на 3 функции заменили.. шило на мыло имхо&lt;br&gt;&lt;br&gt;&amp;gt;  if( ord($_) == 110 ) &#123; &lt;br&gt;&lt;br&gt;регуляркой это: /: &#092;D+$/&lt;br&gt;</description>
</item>

<item>
    <title>awk быстрее perl ? (Vladin)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html#5</link>
    <pubDate>Sat, 14 Nov 2009 19:52:38 GMT</pubDate>
    <description>+1&lt;br&gt;перл быстрее&lt;br&gt;у меня время на 300М файле по этим скриптам&lt;br&gt;awk: 1 мин 40 сек&lt;br&gt;perl: 29 сек&lt;br&gt;&lt;br&gt;вариант без регулярок: 22 сек&lt;br&gt;&lt;br&gt;open(FH,&quot;infile&quot;);&lt;br&gt;open(NEW,&quot;&amp;gt;outfile&quot;);&lt;br&gt;while(&amp;lt;FH&amp;gt;)&#123;&lt;br&gt;  chop;&lt;br&gt;  $_  = substr( $_, index($_,&apos;:&apos;)+2 );&lt;br&gt;  if( ord($_) == 110 ) &#123;&lt;br&gt;    print NEW &quot;&#092;n$_&quot;;&lt;br&gt;    next;&lt;br&gt;  &#125;&lt;br&gt;  print NEW &quot;:$_&quot;;&lt;br&gt;&#125;&lt;br&gt;</description>
</item>

<item>
    <title>awk быстрее perl ? (Pahanivo)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html#4</link>
    <pubDate>Wed, 11 Nov 2009 11:03:57 GMT</pubDate>
    <description>&amp;gt;&amp;gt;та не, просто удивился, что перл, как и авк, написан на си, &lt;br&gt;&amp;gt;&amp;gt;заточен под обработку текста, как никто, а при этом сливает &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;У них разные регулярные выражения. В awk более быстрые основанные на конечных &lt;br&gt;&amp;gt;автоматах, в perl более функциональные. &lt;br&gt;&amp;gt;&lt;br&gt;&amp;gt;PS: Парсер на С (flex) обойдёт их в десятки раз )) &lt;br&gt;&lt;br&gt;а в шаблонном файле не быстрее подстроку сравнить чем regex заюзать?&lt;br&gt;</description>
</item>

<item>
    <title>awk быстрее perl ? (svn)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html#3</link>
    <pubDate>Wed, 11 Nov 2009 08:33:18 GMT</pubDate>
    <description>&amp;gt;та не, просто удивился, что перл, как и авк, написан на си, &lt;br&gt;&amp;gt;заточен под обработку текста, как никто, а при этом сливает &lt;br&gt;&lt;br&gt;У них разные регулярные выражения. В awk более быстрые основанные на конечных автоматах, в perl более функциональные.&lt;br&gt;&lt;br&gt;PS: Парсер на С (flex) обойдёт их в десятки раз ))&lt;br&gt;</description>
</item>

<item>
    <title>awk быстрее perl ? (greenwar)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html#2</link>
    <pubDate>Wed, 11 Nov 2009 07:19:18 GMT</pubDate>
    <description>&amp;gt;Кокетничаешь.&lt;br&gt;&lt;br&gt;та не.. месяц назад я о перле знал ровно 0&lt;br&gt;&lt;br&gt;&amp;gt;- нет $ в конце regexp и &#092;d+ вместо &#092;d+?. &lt;br&gt;&lt;br&gt;а вот зря их там нет.. на моей машине это увеличивает время на 3 секунды&lt;br&gt;из книжки запомнил, что унарные + * сами по себе жадные, ищут максимальную длину, а с ? ищут минимальную. при $ должен искать с конца строки, а не с начала&lt;br&gt;вообщем, регулярке так зона поиска сужается похоже раза в 2&lt;br&gt;&lt;br&gt;&amp;gt;А вот времена на 400M файле совсем даже обратные: &lt;br&gt;&lt;br&gt;хмхм.. значит, перл у меня не оптимизирован на производительность и ядро тоже&lt;br&gt;+целерон на буке стоит, а не SMP&lt;br&gt;&lt;br&gt;&amp;gt;Если время обработки настолько критично, я бы не постеснялся написать на C. &lt;br&gt;&lt;br&gt;та не, просто удивился, что перл, как и авк, написан на си, заточен под обработку текста, как никто, а при этом сливает&lt;br&gt;</description>
</item>

<item>
    <title>awk быстрее perl ? (ACCA)</title>
    <link>https://opennet.ru/openforum/vsluhforumID9/8508.html#1</link>
    <pubDate>Wed, 11 Nov 2009 04:27:40 GMT</pubDate>
    <description>&amp;gt;..или это я ещё совсем зелёный? &lt;br&gt;&lt;br&gt;Кокетничаешь. Можно выжать разве что ещё пяток процентов по мелочи типа&lt;br&gt;&#091;CODE&#093;&lt;br&gt;#!/usr/bin/perl -w&lt;br&gt;&lt;br&gt;while(&amp;lt;&amp;gt;)&#123;&lt;br&gt;    if(/: (network&#092;d+)/)&#123;print &quot;&#092;n$1&quot;;next&#125;&lt;br&gt;    /: (&#092;d+)/;print &quot;:$1&quot;&lt;br&gt;&#125;&lt;br&gt;&#091;/CODE&#093;&lt;br&gt;&lt;br&gt;- нет $ в конце regexp и &#092;d+ вместо &#092;d+?.&lt;br&gt;&lt;br&gt;А вот времена на 400M файле совсем даже обратные:&lt;br&gt;&lt;br&gt;&#091;CODE&#093;&lt;br&gt;$ time ./counter.pl datafile.txt &amp;gt; /dev/null&lt;br&gt;&lt;br&gt;real0m26.809s&lt;br&gt;user0m26.510s&lt;br&gt;sys0m0.290s&lt;br&gt;&lt;br&gt;$ time awk -F&apos;: *&apos; &apos; &#123; r = r ? r &quot;:&quot; $2 : $2 &#125; /^Failed RADIUS Accounting procedures/&#123; print r; r = 0 &#125;&apos; datafile.txt &amp;gt; /dev/null&lt;br&gt;&lt;br&gt;real0m54.194s&lt;br&gt;user0m53.950s&lt;br&gt;sys0m0.240s&lt;br&gt;&lt;br&gt;$ uname -a&lt;br&gt;Linux hostname 2.6.31-14-generic #48-Ubuntu SMP Fri Oct 16 14:05:01 UTC 2009 x86_64 GNU/Linux&lt;br&gt;$ awk --version&lt;br&gt;GNU Awk 3.1.6&lt;br&gt;$ perl --version&lt;br&gt;This is perl, v5.10.0 built for x86_64-linux-gnu-thread-multi&lt;br&gt;&lt;br&gt;&#091;/CODE&#093;&lt;br&gt;&lt;br&gt;&lt;br&gt;Если время обработки настолько критично, я бы не постеснялся написать на C.&lt;br&gt;</description>
</item>

</channel>
</rss>
