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 20:33 | Nová verze

Společnost NVIDIA oficiálně vydala verzi 10.0 toolkitu CUDA (Wikipedie) umožňujícího vývoj aplikací běžících na jejich grafických kartách. Přehled novinek v poznámkách k vydání.

Ladislav Hagara | Komentářů: 0
dnes 20:00 | Upozornění

Příspěvek Jak přežít plánovanou údržbu DNS na blogu zaměstnanců CZ.NIC upozorňuje na historicky poprvé podepsání DNS root zóny novým klíčem dne 11. října 2018 v 18:00. Software, který nebude po tomto okamžiku obsahovat nový DNSSEC root klíč, nebude schopen resolvovat žádná data. Druhým důležitým datem je 1. února 2019, kdy významní výrobci DNS softwaru, také historicky poprvé, přestanou podporovat servery, které porušují DNS standard

… více »
Ladislav Hagara | Komentářů: 0
dnes 15:55 | Pozvánky

Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 156. brněnský sraz, který proběhne v pátek 21. září od 18:00 v restauraci Na Purkyňce na adrese Purkyňova 80.

Ladislav Hagara | Komentářů: 0
dnes 13:22 | Nová verze

Alan Griffiths z Canonicalu oznámil vydání verze 1.0.0 display serveru Mir (GitHub, Wikipedie). Mir byl představen v březnu 2013 jako náhrada X serveru a alternativa k Waylandu. Dnes Mir běží nad Waylandem a cílen je na internet věcí (IoT).

Ladislav Hagara | Komentářů: 0
včera 22:00 | Nasazení Linuxu
Stabilní aktualizace Chrome OS 69 (resp. Chromium OS), konkrétně 69.0.3497.95, přináší mj. podporu linuxových aplikací. Implementována je pomocí virtualizace, a proto je tato funkce také omezena na zařízení s dostatkem paměti a podporou hardwarové akcelerace, tudíž nejsou podporovány chromebooky s 32bitovými architekturami ARM, či Intel Bay Trail (tzn. bez Intel VT-x).
Fluttershy, yay! | Komentářů: 5
včera 21:32 | Zajímavý projekt
Došlo k uvolnění linuxové distribuce CLIP OS, vyvíjené francouzským úřadem pro kybernetickou bezpečnost ANSSI, jako open source. Vznikla za účelem nasazení v úřadech, kde je potřeba omezit přístup k důvěrným datům. Je založená na Gentoo.
Fluttershy, yay! | Komentářů: 1
včera 16:00 | Komerce

Zjistěte více o bezpečné a flexibilní architektuře v cloudu! IBM Cloud poskytuje bezpečné úložiště pro Vaše obchodní data s možností škálovatelnosti a flexibilitou ukládání dat. Zároveň nabízí prostředky pro jejich analýzu, vizualizaci, reporting a podporu rozhodování.

… více »
Fluttershy, yay! | Komentářů: 12
včera 12:22 | Nová verze

V dubnu letošního roku Mozilla představila webový prohlížeč pro rozšířenou a virtuální realitu Firefox Reality (GitHub). V úterý oznámila vydání verze 1.0. Ukázka na YouTube. Firefox Reality je k dispozici pro Viveport, Oculus a Daydream.

Ladislav Hagara | Komentářů: 2
včera 12:00 | Komunita

V srpnu loňského roku společnost Oracle oznámila, že Java EE (Enterprise Edition) bude uvolněna jako open source. O měsíc později bylo rozhodnuto, že tato open source Java EE bude přejmenována a předána Eclipse Foundation. Nové jméno bylo oznámeno v únoru letošního roku. Z Java EE se stala Jakarta EE. Eclipse Foundation včera oznámila dosažení dalšího milníku. Zdrojové kódy aplikačního serveru GlassFish jsou již k dispozici v git repozitářích Eclipse Foundation (GitHub).

Ladislav Hagara | Komentářů: 0
19.9. 23:55 | Komunita

LTS (Long Term Support) podpora Ubuntu 12.04 LTS (Precise Pangolin) skončila po 5 letech od jeho vydání, tj. v dubnu 2017. V březnu 2017 ale Canonical představil placenou ESM (Extended Security Maintenance) podporu, díky které je Ubuntu 12.04 podporováno do dubna 2020. Dnes Canonical potvrdil ESM podporu také pro Ubuntu 14.04 LTS (Trusty Tahr), jehož LTS podpora skončí v dubnu 2019.

Ladislav Hagara | Komentářů: 0
Na optické médium (CD, DVD, BD aj.) jsem naposledy vypaloval(a) data před méně než
 (13%)
 (14%)
 (20%)
 (23%)
 (25%)
 (4%)
 (1%)
Celkem 383 hlasů
 Komentářů: 33, poslední 16.9. 11:55
Rozcestník

Dotaz: Nahrazeni mezer znakem

30.11.2005 18:54 Andrew
Nahrazeni mezer znakem
Přečteno: 738×
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.