abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 19:33 | Zajímavý článek Marek Stopka | Komentářů: 0
dnes 17:55 | Nová verze

Bylo oznámeno vydání nové verze 3.0.0 a krátce na to opravných verzí 3.0.1 a 3.0.2 nástroje mitmproxy určeného pro vytváření interaktivních MITM proxy pro HTTP a HTTPS komunikaci. Přehled novinek v příspěvku na blogu. Přispělo 56 vývojářů. Aktualizována byla také dokumentace [Hacker News].

Ladislav Hagara | Komentářů: 0
dnes 01:11 | Nová verze

Byla vydána nová major verze 3.0 svobodného multiplatformního geografického informačního systému QGIS (Wikipedie). Její kódové jméno je Girona, dle názvu města, ve kterém proběhlo 15. setkání vývojářů QGISu. Přehled novinek i s náhledy a animacemi v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
včera 20:33 | Zajímavý článek

Nadace Raspberry Pi vydala sedmašedesáté číslo (pdf) anglicky psaného časopisu MagPi věnovanému Raspberry Pi a projektům postaveným na tomto jednodeskovém počítači a čtvrté číslo (pdf) časopisu pro kutily HackSpace věnovanému navíc 3D tisku, pájení, řezání nebo i elektronice a IoT.

Ladislav Hagara | Komentářů: 0
včera 18:33 | Komunita

Morevna Project, který stojí za řadou svobodného softwaru pro animátory (např. Synfig Studio, RenderChan nebo Papagayo-NG) a svobodnými (CC-BY-SA) animovanými filmy/komiksy Morevna (3. díl) a Pepper&Carrot: The Potion Contest (6. díl), sbírá do 1. března příspěvky na 4. díl svého animovaného filmu Morevna. Mezi odměnami přispěvatelům lze najít např. i videokurzy animace v Synfigu či Blenderu.

xHire | Komentářů: 0
včera 12:22 | Bezpečnostní upozornění

Ve středu vydaná "npm@next" verze 5.7.0 správce balíčků pro JavaScript npm (Wikipedie, Node Package Manager) přinesla řadě uživatelů Linuxu nečekanou nepříjemnost. V závislosti na způsobu instalace a ve spojení s příkazem sudo mohlo dojít ke změně vlastníka u systémových souborů, také například /. Chyba je opravena v před několika hodinami vydané verzi npm 5.7.1 [reddit].

Ladislav Hagara | Komentářů: 10
včera 10:00 | Nová verze

Byla vydána verze 10.5 open source alternativy GitHubu, tj. softwarového nástroje s webovým rozhraním umožňujícího spolupráci na zdrojových kódech, GitLab (Wikipedie). Představení nových vlastností v příspěvku na blogu. Zdůraznit lze integrovanou podporu Let's Encrypt.

Ladislav Hagara | Komentářů: 0
22.2. 12:33 | Komunita

Příspěvek na blogu Signalu (Wikipedie) informuje o založení neziskové nadace Signal Foundation, jež bude zastřešovat další vývoj tohoto svobodného bezpečného komunikátoru běžícího také na Linuxu (Signal Desktop). Brian Acton, spoluzakladatel WhatsAppu, věnoval nadaci 50 milionů dolarů [Hacker News].

Ladislav Hagara | Komentářů: 1
22.2. 05:55 | Zajímavý článek

Článek na Fedora Magazine krátce představuje programovací jazyk Rust a několik zajímavých v Rustu naprogramovaných terminálových aplikací. Jedná se o alternativu k příkazu grep ripgrep, moderní barevnou alternativu k příkazu ls exa, příkazem cloc inspirovaný tokei a zvířátko v terminálu ternimal.

Ladislav Hagara | Komentářů: 0
21.2. 23:55 | Zajímavý projekt

Byl spuštěn Humble Classics Return Bundle. Za vlastní cenu lze koupit hry Broken Sword 5 - The Serpent's Curse, Shadowrun Returns a Shadowrun: Dragonfall - Director's Cut. Při nadprůměrné platbě (aktuálně 8,48 $) také Shadowrun: Hong Kong - Extended Edition, Wasteland 2: Director's Cut - Standard Edition, Age of Wonders III a Xenonauts. Při platbě 15 $ a více lze získat navíc Torment: Tides of Numenera a Dreamfall Chapters: The Final Cut Edition.

Ladislav Hagara | Komentářů: 0
Který webový vyhledávač používáte nejčastěji?
 (2%)
 (28%)
 (62%)
 (2%)
 (3%)
 (0%)
 (1%)
 (1%)
Celkem 447 hlasů
 Komentářů: 35, poslední 21.2. 19:51
    Rozcestník

    Dotaz: Optimalizace scriptu v bashi

    23.3.2011 11:29 beginer666 | skóre: 9
    Optimalizace scriptu v bashi
    Přečteno: 445×
    Zdravim, rád bych se s vámi poradil na optimalizace programu.

    Mám program v bashi který načítá data z http. Ty data uložim(wget > soubor) a následně je čtu(cat soubor) a dál separuju - takže cat neco |sed | grep | gawk | gawk | a následně to uložim do db ( | mysql -u user -p -D db) .

    První otázka:

    Dá se nějak zjistit co z toho všeho je nejnáročnější?

    - ještě jsem neuvedl různé smyčky ve smyčce atd. atd. ale to možná nebude zas tak náročné.

    Druhá otázka:

    Jaký způsobem ten script můžu optimalizovat?

    - aby byl rychleji proveden

    - podle mého měření trvá na serveru se 4xCPU 15 minut, na serveru se 2xCPU 30 minut a na serveru s 1xCPU 55 minut.

    Předem děkuji za hodnotné příspěvky.

    B666

    Řešení dotazu:


    Odpovědi

    23.3.2011 13:58 Miklik | skóre: 27 | Krnov
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Napsat ho v něčem jiném. Napsal jsem si skript v bash co mi zpracovával co csv data z iostat, cca 100MB dat. Po hodině to zpracovalo sotva 10% dat. Přepsal jsem to javy a projelo to celé za 30 minut.
    Netvrdím to, ale možná je to pravda.
    23.3.2011 14:24 Semo | skóre: 44 | blog: Semo
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Netusim, co tam robis, ale ak hodinu nieco parsujes, tak tam musis mat spustanie ohromneho poctu procesov. Proti spusteniu procesu (pipa atd)je vsetko ostatne uzasne rychle. Takze optimalizovat vnutra cyklov, precitat si manual ku prikazom a nepustat cat neco |sed | grep | gawk | gawk ked sa to cele da spravit 1 sedom alebo 1 gawkom. Nepustat 1000 sedov na 1000 suborov, ale 1 sed na 1000 suborov a tak podobne.
    If you hold a Unix shell up to your ear, you can you hear the C.
    23.3.2011 15:01 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Něco na tom je, akorát ty data se moc jednim sedem nebo awk dostat nedaj.
    23.3.2011 15:32 Semo | skóre: 44 | blog: Semo
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Take zadania sice existuju, ale drviva vacsina praktickych pouziti vystaci s 1. 1 sed s ukrutnym prikazom v nom sa spusta daleko rychlejsie ako niekolko sedov s primitivnym. A az na vynimky je rychlost behu sedu len velmi malo zavisla na zlozitosti prikazu.
    If you hold a Unix shell up to your ear, you can you hear the C.
    23.3.2011 15:06 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Také hlasuji pro to napsat to v něčem jiném - "stačí" nějaký skriptovací jazyk, např. Python nebo Ruby. Odpadne několik problémů: nebudou se neustále spouštět nějaké procesy, nebu se neustále znovu připojovat do databáze (pokud jsi to MySQL měl třeba ve smyčce), navíc pochybuju o tom, že jsi těmi sedy a awky korektně escapoval hodnoty v SQL příkazech.

    Pokud s jinými jazyky nez bashem nemáš zkušenosti, nápiš sem nějaké zadání, měla by to být rychlovka (pokud jsi to predtim totiž řešil v básni, určitě to není nic složitého :).
    23.3.2011 15:09 Messa | skóre: 39 | blog: Messa
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Sakra, na ty automatické opravy v iOS musím dávat pozor. Ale oprava bash - báseň je pěkná :)
    23.3.2011 15:41 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Díky - je na tebe nějakej email nebo skype-nickname?
    23.3.2011 15:50 Sten
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Třeba ten, co má na profilu ;-)
    23.3.2011 22:50 rajo | skóre: 4 | Bratislava
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Ak by si to chcel prepisat do perlu, odporucam moduly:
    WWW::Mechanize
    HTML::TreeBuilder
    Data::Dumper
    LWP::UserAgent
    
    Priklad:
    #!/usr/bin/perl -w
    use strict;
    
    $| = 1;
    
    use LWP::UserAgent;
    use HTML::TreeBuilder;
    use Time::HiRes qw(gettimeofday tv_interval usleep sleep);
    use URI;
    use File::Path;
    use Data::Dumper;
    
    my $start_url   = 'http://blog.hostname.sk';
    my $regexp      = 'MySQL';
    my $ua = LWP::UserAgent->new;
    
    my $response = $ua->get($start_url);
    unless ($response->is_success) {
        warn $response->status_line;
    }
    
    #warn Dumper($response);
    my $tree        = HTML::TreeBuilder->new_from_content($response->content);
    
    my $base        = [ map { $_->attr('href'); } $tree->look_down(
            '_tag', 'base',
            sub { $_[0]->attr('href') ne '' }
        ) ]->[0];
    $base ||= $start_url;
    my @raw_links   = $tree->look_down(
        '_tag', 'a',
        sub { my $href = $_[0]->attr('href'); (defined($href) && $href =~ m/$regexp/i); }
    );
    
    #print Dumper(\@raw_links);
    my @links = map { URI->new_abs( $_->attr('href'), $base)->as_string(); } @raw_links;
    
    $tree = $tree->delete();
    
    print Dumper(\@links);
    
    Skript uvedeny vyssie najde na mojom blogu vsetky linky v suvislosti s MySQL ($regexp). Mozno potrebujes nieco podobne.
    24.3.2011 16:40 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Díky za příklad mrknu na to.
    24.3.2011 08:19 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Z toho co tu ještě nepadlo:
    1. paralelizace (souběžně stahovat a parsovat, aby relativně rychlé parsování nečekalo než se s...t...áááá...hne nějaká problémová stránka. Celkové zrychlení samozřejmě nebude nijak závratné, pokud je dostupnost stránek dobrá. Podle měření je problém spíš v prasování :)
    2. stahovat wgetem inteligentně (nestahovat třeba stránky které se nezměnily, pokud k tomu není z vaší strany důvod)
    3. ověřit, že pokud máte utf-8 locales, tak že nemáte nástroje které mají problémy s utf-8 (např. grep<2.6), kde časté volání funkce mbrtowc parsování řádově (!) zpomaluje
      printf "1\n2\n3\n4\n5" | ltrace grep "1" 2>&1 | grep -c '^mbrtowc('
      by mělo hodit tak "2" (ujistěte se že máte ltrace), nebo jinak, zpracování delšího souboru by mělo trvat zhruba stejně dlouho s nastaveným LANG=C jako bez něj.
    Samozřejmě největší problém bude používání tolika nástrojů na něco, na co stačí jeden, ale to už bylo řečeno. cat před sed je jistě nesmysl (sed umí číst ze souboru), grep za sedem je patrně také nesmysl (výstup sedu lze libovolně přizpůsobit)
    24.3.2011 16:41 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Jinak to vypadá že nejdelší doba je zápis do mysql ): tak to už se asi urychlit nedá co?
    24.3.2011 18:32 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Dá, můžete si postupně vyrábět jeden mega insert, který pak provedete a vložíte vše najednou. Je to takový ten formát který si můžete vytvořit třeba při dumpování z phpMyAdmina, zapomněl jsem jak se mu říká :)

    Ale i kdybyste jen vytvořil sadu N insertů a ten poslal do databáze (man mysql) tak to bude rychlejší, než pouštět N x mysql.
    24.3.2011 19:46 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    To lze často urychlit nejsnáze :).
    Zkuste, jestli můžete, připravit pro 500 záznamů:
    INSERT INTO `table` (`x`,`y`) VALUES 
     ('x1','y1'),
     ('x2','y2'),
    …
     ('xN','yN');
    
    A odeslat do DB a třeba jako nový proces. PS: Nedělejte to pro všechno naráz, 500-1500 by mohlo vycházet nejlépe (záleží na tom jak je DB řádek velký).
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    Řešení 1× (beginer666 (tazatel))
    24.3.2011 21:16 Kit
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Mám program v bashi který načítá data z http. Ty data uložim(wget > soubor) a následně je čtu(cat soubor) a dál separuju - takže cat neco |sed | grep | gawk | gawk | a následně to uložim do db ( | mysql -u user -p -D db) .
    Ukládání výsledku do souboru je zdržující. Je lepší ho rovnou nasměrovat rourou do filtrů. Je vcelku jedno, kolik jich je, hlavně je nutné se vyvarovat cyklů v bashi. Nejvíc zdržují smyčky ve smyčce, ty by se v bashi vůbec neměly vyskytovat. Je možné, že právě ty jsou největší brzdou.

    Úloha se dá pohodlně paralelizovat přidáním znaku & za volání bashové funkce. Ovšem v tomto případě bych omezil počet paralelních volání na nějakou rozumnou hodnotu (desítky až tisíce).

    Hodně zdržují inserty do MySQL po jednom záznamu. Jak už bylo zmíněno, je lepší ukládat např. 500 záznamů jako jednu transakci.

    Také bych možná zkusil jinou databázi, v tomto případě bych asi vybral Redis (pokud je to možné) a klidně ukládal po jednom záznamu. Je to velmi rychlé. Další proces může eventuálně (pokud to bude nutné) asynchronně záznamy vybírat a po skupinách sázet do MySQL.
    24.3.2011 21:40 tomasgn | skóre: 23 | JN89GE
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    konstrukce "cat neco | sed | grep | gawk | gawk" by melo jit zvladnout cele pomoci awk. s rychlosti to nemusi byt az tak hrozne. co posloupnost prikazu jako sed a grep resi minuty, jedno awk vyplivne za vterinu.
    25.3.2011 00:38 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Tak jsem to optimalizoval na wget| grep | sed | sed | awk | mysql ale nepřijde mi že je to rychlejší.

    Rozdělim jsem těch 3600 stránek co musim načíst na 10x360 a pouštim je najednou na pozadí.

    Když si dám ps aux tak vidim:
    root     11217  0.0  0.8   7544   840 pts/2    S    00:31   0:00 grep 
    root     11218  0.0  0.8   9688   836 pts/2    S    00:31   0:00 sed 
    root     11219  0.0  0.8   9688   864 pts/2    S    00:31   0:00 sed 
    root     11220  0.0  0.9  10368   980 pts/2    S    00:31   0:00 gawk 
    root     11221  0.0  2.5  33644  2524 pts/2    S    00:31   0:00 mysql 
    root     11226  0.0  2.0  26644  2048 pts/2    S    00:31   0:00 wget
    root     11227  0.0  0.8   7544   840 pts/2    S    00:31   0:00 grep 
    root     11228  0.0  0.8   9688   832 pts/2    S    00:31   0:00 sed 
    root     11229  0.0  0.8   9688   860 pts/2    S    00:31   0:00 sed 
    root     11230  0.0  0.9  10368   984 pts/2    S    00:31   0:00 gawk 
    root     11231  0.0  2.5  33644  2520 pts/2    S    00:31   0:00 mysql
    root     11234  0.0  0.8   9688   836 pts/2    S    00:31   0:00 sed 
    root     11235  0.0  0.8   9688   860 pts/2    S    00:31   0:00 sed 
    root     11236  0.0  0.9  10368   980 pts/2    S    00:31   0:00 gawk  
    root     11237  0.0  2.5  33644  2528 pts/2    S    00:31   0:00 mysql 
    root     11238  0.0  2.0  26644  2048 pts/2    S    00:31   0:00 wget
    root     11239  0.0  0.8   7544   844 pts/2    S    00:31   0:00 grep 
    root     11240  0.0  0.8   9688   832 pts/2    S    00:31   0:00 sed 
    root     11241  0.0  0.8   9688   864 pts/2    S    00:31   0:00 sed 
    root     11242  0.0  0.9  10368   984 pts/2    S    00:31   0:00 gawk 
    root     11243  0.0  2.5  33644  2524 pts/2    S    00:31   0:00 mysql 
    root     11244  0.0  2.0  26644  2044 pts/2    S    00:31   0:00 wget 
    root     11245  0.0  0.8   7544   840 pts/2    S    00:31   0:00 grep 
    root     11246  0.0  0.8   9688   832 pts/2    S    00:31   0:00 sed
    root     11247  0.0  0.8   9688   860 pts/2    S    00:31   0:00 sed 
    root     11248  0.0  0.9  10368   980 pts/2    S    00:31   0:00 gawk 
    root     11249  0.0  2.5  33644  2528 pts/2    S    00:31   0:00 mysql 
    root     11250  0.0  2.0  26644  2044 pts/2    S    00:31   0:00 wget 
    root     11251  0.0  0.8   7544   840 pts/2    S    00:31   0:00 grep 
    root     11252  0.0  0.8   9688   832 pts/2    S    00:31   0:00 sed 
    root     11253  0.0  0.8   9688   864 pts/2    S    00:31   0:00 sed 
    root     11254  0.0  0.9  10368   980 pts/2    S    00:31   0:00 gawk 
    root     11255  0.0  2.5  33644  2528 pts/2    S    00:31   0:00 mysql
    root     11257  0.0  2.0  26644  2044 pts/2    S    00:32   0:00 wget 
    root     11258  0.0  0.8   7544   840 pts/2    S    00:32   0:00 grep 
    root     11259  0.0  0.8   9688   832 pts/2    S    00:32   0:00 sed 
    root     11260  0.0  0.8   9688   864 pts/2    S    00:32   0:00 sed 
    root     11261  0.0  0.9  10368   980 pts/2    S    00:32   0:00 gawk 
    root     11262  0.0  2.5  33644  2524 pts/2    S    00:32   0:00 mysql 
    root     11264  0.0  2.0  26644  2044 pts/2    S    00:32   0:00 wget 
    root     11265  0.0  0.8   7544   840 pts/2    S    00:32   0:00 grep 
    root     11266  0.0  0.8   9688   832 pts/2    S    00:32   0:00 sed 
    root     11267  0.0  0.8   9688   860 pts/2    S    00:32   0:00 sed
    root     11268  0.0  0.9  10368   984 pts/2    S    00:32   0:00 gawk
    root     11269  0.0  2.5  33644  2528 pts/2    S    00:32   0:00 mysql 
    root     11271  0.0  2.0  26644  2044 pts/2    S    00:32   0:00 wget 
    root     11272  0.0  0.8   7544   844 pts/2    S    00:32   0:00 grep 
    root     11273  0.0  0.8   9688   836 pts/2    S    00:32   0:00 sed 
    root     11274  0.0  0.8   9688   860 pts/2    S    00:32   0:00 sed 
    root     11275  0.0  0.9  10368   984 pts/2    S    00:32   0:00 gawk  
    root     11276  0.0  2.5  33644  2524 pts/2    S    00:32   0:00 mysql 
    root     11278  0.0  2.0  26644  2048 pts/2    S    00:32   0:00 wget 
    root     11279  0.0  0.8   7544   844 pts/2    S    00:32   0:00 grep 
    root     11280  0.0  0.8   9688   832 pts/2    S    00:32   0:00 sed 
    root     11281  0.0  0.8   9688   864 pts/2    S    00:32   0:00 sed 
    root     11282  0.0  0.9  10368   984 pts/2    S    00:32   0:00 gawk  
    root     11283  0.0  2.5  33644  2528 pts/2    S    00:32   0:00 mysql 
    root     11284  0.0  1.1  16332  1160 pts/0    R+   00:32   0:00 ps aux
    root     19216  0.0  3.3  70456  3336 ?        Ss   Mar24   0:00 sshd: root@pts/2
    root     19548  0.0  2.0  19260  2056 pts/2    Ss+  Mar24   0:00 -bash
    root     26928  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    root     26929  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    root     26930  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    root     26931  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    root     26932  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    root     26933  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    root     26934  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    root     26935  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    root     26936  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    root     26937  0.0  0.9  10632   920 pts/2    S    Mar24   0:00 /bin/bash ./prog2
    
    
    Přijde mi jako že se to docela fláká, vytížení cpu na 00 nic.

    Zkusim to ještě nenačítat rovnou do mysql a uvidim. Jinak fakt nevim.
    Řešení 1× (beginer666 (tazatel))
    25.3.2011 06:34 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Jsem si jist že spustit mysql 10x bude rychlejší, než ji spustit 3600x :) Jen tak dál. A grep | sed je do očí bijící, sed umí grepovat, zjednodušeně sed -e "/grep-like-regexp/ s/foo/bar/"
    25.3.2011 08:33 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Díky za tip - nejsem žádný profi programátor (;
    25.3.2011 08:50 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    tak bohužel
    
    nefunguje: sed -e "/hledaneslovo/ s/foo/bar/g"
    funguje:  grep hledaneslovo | sed s/foo/bar/g
    
    
    25.3.2011 10:32 Kit
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    sed -ne "/hledaneslovo/ s/foo/bar/gp"
    25.3.2011 10:59 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    To vynechá řádky kde sice je hledaneslovo, ale není foo. Řešení stejné jako to s grep viz níže.
    25.3.2011 10:56 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    ok, příliš zjednodušeno.

    sed implicitně vypisuje vše, co dostane, jen zde mění foo na bar.

    grep naopak vypisuje jen řádky s hledaneslovo

    grep lze simulovat sedem (-n jako nevypisuj, p jako vypiš):
    $ sed -n -e "/hledaneslovo/p"
    Vaše (jen odhaduji) varianta vám vypíše řádky s hledaneslovo a foo tam změní na bar, if any.
    $ printf "foo\nhledaneslovo foo\nhledaneslovo\n" | grep hledaneslovo | sed -e "s/foo/bar/"
    hledaneslovo bar
    hledaneslovo
    
    Často je poptřeba jen vypsat podmíněně řádky, kde (resp. pokud) byla udělána substituce.
    $ printf "foo\nhledaneslovo foo\nhledaneslovo\n" | sed -n -e "/hledaneslovo/ s/foo/bar/p"
    hledaneslovo bar
    
    ale pokud chcete i řádky, kde není foo, tak na řádcích s hledaneslovo uděláte nejdřív substituci, a pak co máte dalším příkazem (tedy nepodmíněně vždy) vypíšete. Příkazy se oddělují středníkem, sdružují se závorkami.
    $ printf "foo\nhledaneslovo foo\nhledaneslovo\n" | sed -n -e "/hledaneslovo/ {s/foo/bar/;p}"
    hledaneslovo bar
    hledaneslovo
    
    25.3.2011 17:20 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Konečně pořádně optimalizováno. Největší brzda byl zápis do MYSQL.

    Teď už to krásně běží a ani to moc nežere paměti.

    Řešim ovšem jiný problém - nejspíš si toho mého masivního surfování někdo všimnul protože se nemůžu dostast ze serveru na jejich stránky. Z ostatních serverů to jde. ((((((((:
    25.3.2011 18:01 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Takže za každým wget přidat sleep 10 ... :D
    Řešení 1× (beginer666 (tazatel))
    25.3.2011 18:52 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    To myslim že je uplně jedno - jelikož každá dávka prohledá 3600 + 1700 + 1600 = 6900 stránek jednou za hodinu tak to ze tam dám pauzu nijak nezmění množství dotazů (;
    25.3.2011 19:12 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Nešlo mi o to změnit počet dotazů, ale snížit průběžné zatěžování serveru. Některé servery mohou mít z masivních stahovačů kopřivku, slušným stahovačům bránit nemusí, protože když budou tito chtít, tak si to veřejný obsah stejně nějak distribuovaně stahnou, takže primárně nejde o ochranu obsahu, ale o ochranu dobré odezvy serveru pro všechny návštěvníky.
    25.3.2011 21:01 beginer666 | skóre: 9
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    zatížení se pohybuje od 500 do 1200 kbit za sekundu což mi nepřijde jako kritická zátěž
    25.3.2011 21:40 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    Stahováním webových stránek které ještě parsujete moc velký traffic neuděláte, šlo mi o počet dotazů za sekundu, nevím jak už to mám lépe a jasněji vyjádřit :)
    pepe_ avatar 26.3.2011 15:33 pepe_ | skóre: 47
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi

    wget --wait=3 --limit-rate=3K -r -p http://www.abclinuxu.cz/poradna/programovani/show/331044

     

    Pockat 3 vteriny a stahovar rychlosti  3K/s

     

    a nezahnapne to net.

    25.3.2011 06:31 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    co posloupnost prikazu jako sed a grep resi minuty, jedno awk vyplivne za vterinu.

    No to minuty vs vteřiny není pravda, ale je fakt, že spouštět několik procesů za sebou je vždy horší, než spustit jeden, ať už je to sed nebo awk. Pokud se to spouští 3600x, tak se pak ty vteřinky sčítají a je to o to rychlejší.
    25.3.2011 08:40 tomasgn | skóre: 23 | JN89GE
    Rozbalit Rozbalit vše Re: Optimalizace scriptu v bashi
    co posloupnost prikazu jako sed a grep resi minuty, jedno awk vyplivne za vterinu.

    No to minuty vs vteřiny není pravda
    uz jsem skutecne videl skript, kde se kombinaci sed a grep a nevim co jeste podarilo nahradit jednim awk a skutecne to vedlo az k takovemu zrychleni. ale je fakt, ze uloha tam puvodne byla celkove spatne resena ;-)

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.