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 10:40 | Zajímavý článek

Lukáš Růžička se v článku Workrave ve Fedoře aneb jak si nevytunelovat karpál na MojeFedora.cz věnuje aplikaci Workrave (Wikipedie) na sledování času stráveného na počítači, která může pomoci vyhnout se negativním účinkům práce s počítačem (RSI, CTS), nebo je alespoň výrazně zmírnit.

Ladislav Hagara | Komentářů: 0
dnes 10:00 | Komunita

Na Humble Bundle lze získat počítačovou hru Shadow Warrior: Special Edition běžící také v Linuxu zdarma. Speciální akce končí v sobotu v 19:00.

Ladislav Hagara | Komentářů: 0
včera 23:11 | Nová verze

Byla vydána verze 2.4.0 analyzátoru síťového provozu Wireshark. Jedná se o první stabilní verzi nové řady 2.4. Podrobný přehled novinek v poznámkách k vydání. V červnu proběhla konference SharkFest’17 US věnovaná Wiresharku. Záznamy přednášek jsou k dispozici na YouTube.

Ladislav Hagara | Komentářů: 0
včera 13:11 | Pozvánky

Spolek OpenAlt zve příznivce otevřeného přístupu na 142. brněnský sraz, který proběhne v pátek 21. července od 18:00 hodin ve Sport Centru Srbská (Srbská 4). Od 19:00 je pro zájemce zamluveno hřiště na plážový volejbal.

Ladislav Hagara | Komentářů: 0
včera 12:34 | Bezpečnostní upozornění

V GNOME Soubory, původně Nautilus, konkrétně v generování náhledů exe, msi, dll a lnk souborů byla nalezena a opravena bezpečnostní chyba CVE-2017-11421 s názvem Bad Taste. Při otevření složky obsahující tyto soubory může být spuštěn VBScript obsažen v názvech těchto souborů.

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

Společnost Oracle vydala čtvrtletní bezpečnostní aktualizaci svých softwarových produktů (CPU, Critical Patch Update). Opraveno bylo celkově 308 bezpečnostních chyb. V Oracle Java SE je například opraveno 32 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 28 z nich. V Oracle MySQL je opraveno 30 bezpečnostních chyb. Vzdáleně zneužitelných bez autentizace je 9 z nich.

Ladislav Hagara | Komentářů: 0
včera 01:00 | Komunita

Mark Krenz, známý svým twitterovým účtem @climagic (Command Line Magic), kde ukazuje, co vše a jak lze dělat v příkazovém řádku, přednášel včera v Praze. Záznam přednášky je k dispozici na YouTube.

Ladislav Hagara | Komentářů: 0
19.7. 10:00 | Nová verze

Microsoft vydal Skype pro Linux ve verzi 5.4 Beta. Nejnovější Skype pro Linux je postaven na frameworku Electron 1.7.4 a přináší skupinové videohovory.

Ladislav Hagara | Komentářů: 11
19.7. 06:00 | Nová verze

Werner Koch, zakladatel a hlavní vývojář GnuPG, oznámil vydání verze 1.8.0 svobodné kryptografické knihovny Libgcrypt. Jedná se o první stabilní verzi nové řady 1.8. Ta je API i ABI kompatibilní s řadou 1.7. Z novinek vývojáři zdůrazňují podporu kryptografických hašovacích funkcí Blake2 (Wikpedie), šifrovací mód XTS nebo zvýšení výkonu na architektuře ARM.

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

Stefan Vorkoetter představil na svých stránkách DIY tablet s Raspberry Pi 3 Model B. Z Raspberry Pi odstranil USB porty, ethernetový port i GPIO konektor. Použil oficiální sedmipalcový dotykový displej s rozlišením 800x480 pixelů. Hmotnost tabletu je 484  g.

Ladislav Hagara | Komentářů: 6
Chystáte se pořídit CPU AMD Ryzen?
 (7%)
 (31%)
 (1%)
 (10%)
 (43%)
 (8%)
Celkem 1028 hlasů
 Komentářů: 65, poslední 1.6. 19:16
    Rozcestník

    Dotaz: Nahrazeni mezer znakem

    30.11.2005 18:54 Andrew
    Nahrazeni mezer znakem
    Přečteno: 737×
    Hello,

    pls nevite nekdo cim resp. jak nahradit mezery v souboru (log file) nejakym znakem? Zadrhel je v tom, ze potrebuji nahradit mezery pouze te casti, ktera je uvozena uvozovkami-" ".

    Dik za tipy....

    Odpovědi

    David Watzke avatar 30.11.2005 19:12 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    $ cat log.file
    " "
    $ sed 's/" "/"_"/g' log.file
    "_"
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    David Watzke avatar 30.11.2005 19:13 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Oops, zřejmě jsem to špatně přečet. To co děláš bych udělal radši v grafickým editoru, vybral tu část a dal nahradit... Ale v shellu.. to ti musí poradit někdo jiný.
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    30.11.2005 19:26 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
      #include <stdio.h>
    
      int main()
      {
        int c;
        int inside = 0;
    
        while ((c = getchar()) != EOF) {
          if (c == '"') inside = !inside;
          if (inside && c==' ') c = '_';
          putchar(c);
        }
    
        return 0;
      }
    
    Zpracování chyb a/nebo parametrů si doplňte za cvičení.
    30.11.2005 19:29 Andrew
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Dekuji, osetreni chyb provedu a odevzdam :)

    Ale ja mel na mysli realizace v shellu....
    1.12.2005 11:12 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Reseni zalozene pouze na shellu bude v tomto pripade velice pomale. Jedina jeho vyhoda je v tom, ze nepotrebujete zadny externi program. Tak tady je reseni, pouzivajici jenom vestavene prikazy bash'e:
    #!/bin/bash
    
    ZAMENA="_"
    
    IFS=
    while read line ; do
    	quote=0
    	while read -n 1 char ; do
    		if [ "$char" == " " ] ; then
    			if [ $quote -eq 0 ] ; then
    				outchar=" "
    			else
    				outchar="$ZAMENA"
    			fi
    		elif [ "$char" == '"' ] ; then
    			quote=$((1 - quote))
    			outchar='"'
    		else
    			outchar="$char"
    		fi
    		echo -n "$outchar"		
    	done <<<"$line"
    	echo
    done
    
    Obecne v ulohach takoveho typu vynika Perl. Tady je reseni v Perl'u:
    $ perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' soubor.log
    
    Na zaver uvedu srovnani rychlosti vsech 3 reseni (vcetne programu v C, napsaneho Michalem Kubeckem):
    $ ls -sh /var/log/messages
    716K /var/log/messages
    $ time uvozovky.sh < /var/log/messages > /dev/null
    real	2m12.561s
    user	1m57.610s
    sys	0m6.001s
    $ time perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' /var/log/messages > /dev/null
    real	0m0.038s
    user	0m0.030s
    sys	0m0.008s
    $ time uvozovky_c < /var/log/messages > /dev/null
    real	0m0.071s
    user	0m0.059s
    sys	0m0.005s
    
    Muzete si vsimnout, ze reseni v Perl'u je dokonce rychlejsi nez v C.
    1.12.2005 13:34 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Obávám se, že vaše měření je něčím zkresleno. Zkoušel jsem si to na asi 5 MB vstupu a vychází mi přibližně 435 ms pro Perl a 155 ms pro C, což vypadá podstatně věrohodněji. Nezapomněl jste na optimalizace?
    1.12.2005 14:12 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Mereni muze byt velice jednoduse zkresleno jeste tim, jestli uvazujeme prvni start programu nebo nasledujici (cache).
    [~]$ gcc -o uvozovky_c uvozovky.c -O2
    [~]$ time ./uvozovky_c < /usr/src/linux-2.6.14.2.tar.bz2  > /dev/null
    
    real	0m4.195s
    user	0m3.174s
    sys	0m0.201s
    [~]$ time ./uvozovky_c < /usr/src/linux-2.6.14.2.tar.bz2  > /dev/null
    
    real	0m3.492s
    user	0m3.112s
    sys	0m0.132s
    [~]$ time ./uvozovky_c < /usr/src/linux-2.6.14.2.tar.bz2  > /dev/null
    
    real	0m3.250s
    user	0m3.079s
    sys	0m0.132s
    [~]$ time ./uvozovky_c < /usr/src/linux-2.6.14.2.tar.bz2  > /dev/null
    
    real	0m3.301s
    user	0m3.098s
    sys	0m0.137s
    
    Podobne,
    [~]$ time perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' /usr/src/linux-2.6.14.2.tar.bz2 > /dev/null
    
    real	0m2.278s
    user	0m1.806s
    sys	0m0.154s
    [~]$ time perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' /usr/src/linux-2.6.14.2.tar.bz2 > /dev/null
    
    real	0m2.003s
    user	0m1.807s
    sys	0m0.154s
    [~]$ time perl -pe 's/".*?"/($s=$&)=~s: :_:g;$s/eg' /usr/src/linux-2.6.14.2.tar.bz2 > /dev/null
    
    real	0m2.004s
    user	0m1.814s
    sys	0m0.152s
    
    Samozrejme, prvni start Perlu muze byt i pomalejsi nez C, tady mu pomohlo to, ze ja jsem meril rychlost perlu az po c-ku. Neni nic divneho na tom, ze Perl muze byt rychlejsi nez C. Vzlast kdyz si uvedomite, ze pouzivate getchar() misto operaci cteni celeho bloku.
    1.12.2005 14:33 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Samozřejmě jsem používal průměr druhého až čtvrtého běhu programu, nejsem tak hloupý, jak vypadám. Perl v tomto případě není rychlejší než C, protože už z principu, kterým to děláte (vyhledávání regulárního výrazu) dost dobře ani nemůže. Takže tvrdím, že někde děláte chybu, pravděpodobně v těch optimalizacích.

    Vzlast kdyz si uvedomite, ze pouzivate getchar() misto operaci cteni celeho bloku.

    Zapomínáte na to, že streamové operace v libc mají vlastní bufferování, takže vkládat tam ještě druhý buffer by bylo zbytečné a program by to naopak zpomalilo. Není tam ani overhead na volání getchar(), protože to je ve skutečnosti makro. Samozřejmě by šel program trochu zrychlit načítáním celých bloků pomocí read() a jejich zápisem pomocí write(), pak by Perl neměl nejmenší šanci, ale to už by bylo na úkor přehlednosti.

    1.12.2005 15:10 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Samozřejmě jsem používal průměr druhého až čtvrtého běhu programu, nejsem tak hloupý, jak vypadám.
    Nevypadate vubec hloupe, vase prispevky tady a na cz.comp.linux vzdy povazuji za velice duveryhodne. Ale stava se, ze i mistr tesar se utne, takze jsem nevedel, jestli jste nahodou nezapomel na ten cache.
    Takže tvrdím, že někde děláte chybu, pravděpodobně v těch optimalizacích.
    V minulem prispevku jsem uvedl prikaz, pomoci ktereho to prekladam. Optimalizaci mam nastavenou na level 2. Jak to mate vy?
    Zapomínáte na to, že streamové operace v libc mají vlastní bufferování, takže vkládat tam ještě druhý buffer by bylo zbytečné a program by to naopak zpomalilo.
    Plny souhlas.
    Samozřejmě by šel program trochu zrychlit načítáním celých bloků pomocí read() a jejich zápisem pomocí write(), pak by Perl neměl nejmenší šanci, ale to už by bylo na úkor přehlednosti.
    Tak tady nesouhlasim s tim, ze by to zrychlilo program jen trochu.
    [~]$ cat uvozovky_read_write.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define BUFSIZE 512
    
    int main()
    {
        char *buf_in = malloc(BUFSIZE);
        char *buf_out = malloc(BUFSIZE);
        char c;
        int  i, j, n;
        int inside = 0;
    
        j = 0;
        while (n = read(0, buf_in, BUFSIZE)) {
          for (i = 0; i < n; i++) {
    	      c = buf_in[i];
    	      switch (c) {
    		      case '\n': inside = 0; break;
    		      case '"' : inside = !inside; break;
    		      case ' ' : c = inside ? '_' : ' ';
    	      }
    	      buf_out[j++] = c;
    	      if ( j >= BUFSIZE ) {
    		      write(1, buf_out, BUFSIZE);
    		      j = 0;
    	      }
          }
        }
        if ( j ) {
    	    write(1, buf_out, j);
        }
    
        return 0;
    }
    [~]$ gcc -O2 -o uvozovky_read_write uvozovky_read_write.c
    [~]$ time ./uvozovky_read_write < /usr/src/linux-2.6.14.2.tar.bz2 > /dev/null
    
    real	0m0.641s
    user	0m0.326s
    sys	0m0.202s
    
    A skutecne Perl nema sanci.
    1.12.2005 15:28 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Používal jsem '-O3 -fomit-frame-pointer' plus optimalizaci pro procesor. Co se týká přechodu na 'read()' a 'write()', skutečně jsem ho hodně podcenil, rozdíl je v některých případech i řádový. Zdá se, že režie streamových funkcí v glibc je větší, než jsem si pod vlivem dřívějších testů myslel.
    1.12.2005 20:13 Michal Marek (twofish) | skóre: 55 | blog: { display: blog; } | Praha
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Zdá se, že režie streamových funkcí v glibc je větší, než jsem si pod vlivem dřívějších testů myslel.
    Dost velký čas sežere zbytečné zamykání, při použítí getchar_unlocked() a putchar_unlocked() se to celkem zrychlí.
    1.12.2005 20:36 Michal Kubeček | skóre: 71 | Luštěnice
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Díky za upozornění, hlavně že zrovna včera jsem několik hodin strávil studiem chování glibc vůči multithreadovým aplikacím…
    1.12.2005 16:13 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Hmm, tak koukám, že tady je to samý C expert, aneb jak napsat co nejméně efektivní memcpy. Co třeba takhle?:
    #include <stdio.h>
    #include <stdlib.h>
    #include <unistd.h>
    
    #define BUFSIZE 65536
    
    int main()
    {
        char *buf = malloc(BUFSIZE);
        char *c, *end;
        int n;
        int inside = 0;
    
        while (n = read(0, buf, BUFSIZE)) {
            end = buf+n;
            for (c = buf; c < end; c++) {
                switch (*c) {
                    case '\n': inside = 0; break;
                    case '"' : inside = !inside; break;
                    case ' ' : if (inside) *c ='_';
                }
            }
            write(1, buf, n);
        }
    
        return 0;
    }
    Proč ty data přesýpat z jednoho místa na druhé fakt nechápu.
    $ time ./uvozovky_read_write </var/cache/apt/archives/openclipart-png_0.17+dfsg-1_all.deb >/dev/null
    
    real    0m1.716s
    user    0m0.580s
    sys     0m0.270s
    $ time ./uvozovky_read_write_orig </var/cache/apt/archives/openclipart-png_0.17+dfsg-1_all.deb >/dev/null
    
    real    0m1.926s
    user    0m0.800s
    sys     0m0.340s
    
    Krom toho ten půlkylovej buffer byl fakt dobrej vtip. Vůbec vám nevadí, že tráví v kernelu skoro stejně dlouhej čas jako v userspace? Ten uvozovky_read_write_orig má samozřejmě zvětšenej buffer taky, jinak by měl něco kolem 600ms v kernelspace. Toho času real si nevšímejte, nejsem na tom App Serveru sám :-)
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    1.12.2005 16:53 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Tady uz neslo o nejefektivnejsi program v C. Slo o to, porovnat rychlost getchar() versus read(). Spravne jste poukazal na spoustu nedokonalosti, ale vsimnete si, ze po tech upravach cas se zkratil na 10%, kdyzto pri prechodu od getchar k read rozdil byl 5-nasobny. To prave vysvetluje, proc Perl s jeho pomalym regexpem muze byt skoro stejne rychly jako ten prvni program v C - vsechno sezere rezie vstupu/vystupu.
    1.12.2005 17:27 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Však doufám, že jsem se někoho nedotknul :-D
    XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
    1.12.2005 17:36 alex
    Rozbalit Rozbalit vše Re: Nahrazeni mezer znakem
    Ale ne, jste vseobecne uznavan jako Velky Optimizator :-)

    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.