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 18:55 | Nová verze

Byla vydána nová stabilní verze 1.9 (1.9.818.44) webového prohlížeče Vivaldi (Wikipedie). Z novinek vývojáři zdůrazňují podporu nového vyhledávače Ecosia. Ten z příjmů z reklam podporuje výsadbu stromů po celém světě (YouTube). Nově lze přeskupovat ikonky rozšíření nebo řadit poznámky. Nejnovější Vivaldi je postaveno na Chromiu 58.0.3029.82.

Ladislav Hagara | Komentářů: 1
dnes 17:00 | Nová verze

Byla vydána verze 3.7.0 svobodného systému pro správu obsahu (CMS) Joomla!. V oznámení o vydání (YouTube) se píše o 700 vylepšeních. Opraveno bylo také 8 bezpečnostních chyb.

Ladislav Hagara | Komentářů: 0
dnes 08:22 | Komunita

Grsecurity (Wikipedie) je sada bezpečnostních patchů pro linuxové jádro (porovnání se SELinuxem, AppArmorem a KSPP). Od září 2015 nejsou stabilní verze těchto patchů volně k dispozici. Dle včerejšího oznámení (FAQ) nejsou s okamžitou platností volně k dispozici už ani jejich testovací verze.

Ladislav Hagara | Komentářů: 28
včera 23:33 | Komunita

OpenBSD 6.1 vyšlo již 11. dubna. Po dvou týdnech byla vydána i oficiální píseň. Její název je Winter of 95 a k dispozici je ve formátech MP3 a OGG.

Ladislav Hagara | Komentářů: 0
včera 18:55 | Nová verze

Byla vydána verze 2017.1 linuxové distribuce navržené pro digitální forenzní analýzu a penetrační testování Kali Linux. S vydáním verze 2016.1 se Kali Linux stal průběžně aktualizovanou distribucí. Aktualizovat jej lze pomocí příkazů "apt update; apt dist-upgrade; reboot".

Ladislav Hagara | Komentářů: 0
včera 18:22 | Nová verze

Po téměř pěti letech od vydání verze 2.00 byla vydána nová stabilní verze 2.02 systémového zavaděče GNU GRUB (GRand Unified Bootloader). Přehled novinek v souboru NEWS.

Ladislav Hagara | Komentářů: 12
včera 17:55 | Komunita

Vývojáři Debianu oznámili, že od 1. listopadu letošního roku nebudou jejich archivy dostupné pomocí protokolu FTP. Již v lednu oznámil ukončení podpory FTP kernel.org (The Linux Kernel Archives).

Ladislav Hagara | Komentářů: 22
včera 17:00 | Bezpečnostní upozornění

V oblíbeném webmailu postaveném na PHP SquirrelMail (Wikipedie) byla nalezena bezpečnostní chyba CVE-2017-7692, jež může být útočníkem zneužita ke spuštění libovolných příkazů a kompletnímu ovládnutí dotčeného serveru. Zranitelnost se týká pouze instancí, kde je pro transport používán Sendmail.

Ladislav Hagara | Komentářů: 3
včera 13:11 | Zajímavý článek

Soudní dvůr Evropské unie rozhodl (tisková zpráva) ve věci C-527/15: Prodej multimediálního přehrávače, který umožňuje zdarma a jednoduše zhlédnout na televizní obrazovce filmy protiprávně zpřístupněné na internetu, může představovat porušení autorského práva.

Ladislav Hagara | Komentářů: 31
25.4. 13:33 | Pozvánky

Byly stanoveny termíny konferencí LinuxDays 2017 a OpenAlt 2017. Letošní LinuxDays proběhne o víkendu 7. a 8. října v Praze v Dejvicích v prostorách FIT ČVUT. Letošní OpenAlt proběhne o víkendu 4. a 5. listopadu na FIT VUT v Brně.

Ladislav Hagara | Komentářů: 0
Chystáte se pořídit CPU AMD Ryzen?
 (4%)
 (35%)
 (1%)
 (6%)
 (45%)
 (9%)
Celkem 326 hlasů
 Komentářů: 50, poslední dnes 04:06
    Rozcestník

    Dotaz: Optimalizace scriptu v bashi

    23.3.2011 11:29 beginer666 | skóre: 9
    Optimalizace scriptu v bashi
    Přečteno: 443×
    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.