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 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ářů: 8
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
21.2. 00:11 | Bezpečnostní upozornění

Vývojáři linuxové distribuce Mageia na svém blogu upozorňují na narušení bezpečnosti Mageia Identity. Narušitel získal přístup k LDAP databázi a zveřejnil jména uživatelů, jejich emailové adresy a haše hesel. Hesla uživatelů byla resetována.

Ladislav Hagara | Komentářů: 3
20.2. 21:55 | Nová verze

Byla vydána verze 2.0.0 nástroje pro záznam a sdílení terminálových sezení asciinema (GitHub). Z novinek je nutno upozornit na nový zpětně nekompatibilní formát záznamu asciicast v2. S novým formátem si poradí nové verze asciinema-playeru a asciinema-serveru [Hacker News].

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

    Dotaz: awk - vypis dvojrozmerneho pola do tvaru mriezky

    11.2.2013 05:32 victor8 | skóre: 24 | blog: blog | Košice
    awk - vypis dvojrozmerneho pola do tvaru mriezky
    Přečteno: 210×

    Zdravim nespavcov :) Uz dlhsi cas sa mordujem so spracovanim vstupnych dat v tvare:

    #attr2:attr3:attr6:attr5
    value2r1:value3r1:value6r1:value5r1
    #attr1:attr5:attr3:attr2:attr6
    value1r2:value5r2:value3r2:value2r2:value6r2
    value1r3:value5r3:value3r3:value2r3:value6r3
    #attr8:attr2:attr3:attr4:attr5:attr7:attr1
    #attr1:attr2:attr3:attr5
    value1r4:value2r4:value3r4:value5r4
    

    Pravidla pre tvar vstupneho suboru:

    • oddelovacom riadkov je LF
    • oddelovacom stlpcov je ":"
    • Subor sa sklada z blokov. Kazdy blok pozostava z riadka zacinajuceho mriezkou (obsahuje nazvy atributov), ktory moze (ale nemusi) byt nasledovany riadkami s hodnotami.
    • Poradie atributov sa v jednotlivych blokoch moze menit
    • Pocet a vyskyt atributov sa moze v jednotlivych blokoch menit

    Mojim cielom je dostat ich do tvaru:

    #attr1:attr2:attr3:attr4:attr5:attr6:attr7:attr8
    :value2r1:value3r1::value5r1:value6r1
    value1r2:value2r2:value3r2::value5r2:value6r2
    value1r3:value2r3:value3r3::value5r3:value6r3
    value1r4:value2r4:value3r4::value5r4
    

    pripadne:

    #attr1:attr2:attr3:attr4:attr5:attr6:attr7:attr8
    :value2-1:value3-1::value5-1:value6-1::
    value1-2:value2-2:value3-2::value5-2:value6-2::
    value1-3:value2-3:value3-3::value5-3:value6-3::
    value1-4:value2-4:value3-4::value5-4:::
    

    cize, vertikalne ich zarovnat a zoradit podla attrX, ktore budu vypisane v prvom riadku vystupneho suboru ako hlavicka. Cielom je predpriprava suboru na dalsie spracovanie tabulkovym kalkulatorom. Viacero dvojbodiek na konci riadka ako je ukazane vyssie nicomu neprekaza, ale ani nie je potrebnych. (vychadzam z toho ze ich povolenim by sa dal zjednodusit kod, a tabulkovy kalkulator ich aj tak odignoruje

    Zatial som dospel k nasledovnemu:

    awk '
    BEGIN { OFS=FS=":"; record=0 }
    
    # spracovanie zaciatku bloku; nazvy premennych ukladam do attr[i]
    {
     if ($0 ~ /^#/) {
      columns=split(substr($0,2),attr);
      #print"\n"; for(i in attr) print "attr["i"] = "attr[i]; #debug1
      next;
     }
    
    # spracovanie riadkov s hodnotami; hodnoty ukladam do r[record, attr[i]]
     record++;
     numvalues=split($0,value);
      for(i=1;i<=numvalues;i++) {
       r[record SUBSEP attr[i]]= value[i];
       print "r ["record", "attr[i]"] = "r[record SUBSEP attr[i]];  #debug2
      }
    }
    
    END{
     print "-----" #debug3
    
     for (combined in r) {
      #print combined;   #debug4
      num=split(combined, separate, SUBSEP);
      #print separate[1], separate[2], r[separate[1] SUBSEP separate[2]]; #debug5
      # a co dal?
    }
    
    
    

    Vystupom z debug2 je

    r [1, attr2] = value2r1
    r [1, attr3] = value3r1
    r [1, attr6] = value6r1
    r [1, attr5] = value5r1
    r [2, attr1] = value1r2
    r [2, attr5] = value5r2
    r [2, attr3] = value3r2
    r [2, attr2] = value2r2
    r [2, attr6] = value6r2
    r [3, attr1] = value1r3
    r [3, attr5] = value5r3
    r [3, attr3] = value3r3
    r [3, attr2] = value2r3
    r [3, attr6] = value6r3
    r [4, attr1] = value1r4
    r [4, attr2] = value2r4
    r [4, attr3] = value3r4
    r [4, attr5] = value5r4
    
    , takze verim, ze data mam rozparsovane a ulozene v asociativnom poli v poriadku.

    Problemom pre mna je, ako z tohoto vyskladat vysledny vypis. Potrebujem nejako rozumne toto pole vyiterovat, no napada ma len klasicka konstrukcia: dva zanorene fory, ktora mi tu ale fungovat nebude, kedze nemam dva pouzitelne indexy.

    Nejake napady? :)


    Řešení dotazu:


    Odpovědi

    11.2.2013 10:06 l4m4
    Rozbalit Rozbalit vše Re: awk - vypis dvojrozmerneho pola do tvaru mriezky
    Je to nutné dělat v awk?

    Samozřejmě to je možné dělat v awk, ale jelikož je nutné si celý soubor rozparsovat do datových struktur, protože chceš mít ve výsledné hlavičce sjednocení všech atributů, udělal bych to v pythonu:
    import sys
    
    attrs = set()
    data = []
    for line in sys.stdin:
        line = line.strip()
        if not line:
            continue
        if line[0] == '#':
            currentattrs = line[1:].split(':')
            attrs.update(currentattrs)
        else:
            data.append(dict(zip(currentattrs, line.split(':'))))
    
    keys = list(sorted(attrs))
    print '#' + ':'.join(keys)
    for row in data:
        print ':'.join(row.get(k, '') for k in keys)
    
    11.2.2013 13:46 victor8 | skóre: 24 | blog: blog | Košice
    Rozbalit Rozbalit vše Re: awk - vypis dvojrozmerneho pola do tvaru mriezky
    Vdaka za tip ako to spravit v Pythone.

    Bohuzial je to nutne robit v awk, nakolko na servri kde to bude bezat nic ine okrem (plain) awk a sedu nemam a nainstalovat si tam python nemozem :)
    Řešení 1× (victor8 (tazatel))
    11.2.2013 10:55 chochi | skóre: 29 | Praha
    Rozbalit Rozbalit vše Re: awk - vypis dvojrozmerneho pola do tvaru mriezky
    Zaklad je si pripravit pole se vsemi attributy. V awk napriklad takto:
    BEGIN {
        OFS=FS=":"; record=0
    }
    
    # spracovanie zaciatku bloku; nazvy premennych ukladam do attr[i]
    {
        if ($0 ~ /^#/) {
            columns = split(substr($0, 2), attr);
            for(c in attr) {
                # ulozim si vsechny attributy
                all[attr[c]] = attr[c];
            }
            next;
        }
    
        # spracovanie riadkov s hodnotami; hodnoty ukladam do r[record, attr[i]]
        record++;
        numvalues = split($0, value);
        for(i = 1; i <= numvalues; i++) {
            r[record, attr[i]] = value[i];
        }
    }
    
    END{
        nc = asort(all, sort);
        # vypis hlavicky
        ORS = "";
        print("#");
        ORS = ":";
        for (c = 1; c < nc; c++) {
            print(sort[c]);
        }
        ORS = "\n";
        print(sort[c]);
        # vypis obsahu
        for (l = 1; l <= record; l++) {
            ORS = ":";
            for (c = 1; c < nc; c++) {
                print(r[l, sort[c]]);
            }
            ORS = "\n";
            print(r[l, sort[c]]);
        }
    }
    
    Vysledek:
    $ awk -f s.awk < in.txt 
    #attr1:attr2:attr3:attr4:attr5:attr6:attr7:attr8
    :value2r1:value3r1::value5r1:value6r1::
    value1r2:value2r2:value3r2::value5r2:value6r2::
    value1r3:value2r3:value3r3::value5r3:value6r3::
    value1r4:value2r4:value3r4::value5r4:::
    
    11.2.2013 13:13 l4m4
    Rozbalit Rozbalit vše Re: awk - vypis dvojrozmerneho pola do tvaru mriezky
    Ano, v awk to sice lze, ale...

    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.