abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    17.5. 13:44 | Nová verze

    Byla vydána (𝕏) nová major verze 17 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í i s náhledy a videi v oficiálním oznámení.

    Ladislav Hagara | Komentářů: 0
    17.5. 12:22 | Komunita

    Sovereign Tech Fund, tj. program financování otevřeného softwaru německým ministerstvem hospodářství a ochrany klimatu, podpoří vývoj FFmpeg částkou 157 580 eur. V listopadu loňského roku podpořil GNOME částkou 1 milion eur.

    Ladislav Hagara | Komentářů: 0
    17.5. 01:55 | Komunita

    24. září 2024 budou zveřejněny zdrojové kódy přehrávače Winamp.

    Ladislav Hagara | Komentářů: 10
    16.5. 23:33 | Nová verze

    Google Chrome 125 byl prohlášen za stabilní. Nejnovější stabilní verze 125.0.6422.60 přináší řadu oprav a vylepšení (YouTube). Podrobný přehled v poznámkách k vydání. Opraveno bylo 9 bezpečnostních chyb. Vylepšeny byly také nástroje pro vývojáře.

    Ladislav Hagara | Komentářů: 1
    16.5. 21:11 | Nová verze

    Textový editor Neovim byl vydán ve verzi 0.10 (𝕏). Přehled novinek v příspěvku na blogu a v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    16.5. 20:55 | Nová verze

    Byla vydána nová verze 6.3 živé linuxové distribuce Tails (The Amnesic Incognito Live System), jež klade důraz na ochranu soukromí uživatelů a anonymitu. Přehled změn v příslušném seznamu. Tor Browser byl povýšen na verzi 13.0.15.

    Ladislav Hagara | Komentářů: 0
    16.5. 13:33 | IT novinky

    Dnes ve 12:00 byla spuštěna první aukce domén .CZ. Zatím největší zájem je o dro.cz, kachnicka.cz, octavie.cz, uvycepu.cz a vnady.cz [𝕏].

    Ladislav Hagara | Komentářů: 9
    16.5. 13:22 | Nová verze

    JackTrip byl vydán ve verzi 2.3.0. Jedná se o multiplatformní open source software umožňující hudebníkům z různých částí světa společné hraní. JackTrip lze instalovat také z Flathubu.

    Ladislav Hagara | Komentářů: 0
    16.5. 12:22 | Pozvánky

    Patnáctý ročník ne-konference jOpenSpace se koná 4. – 6. října 2024 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytváří všichni účastníci, se skládá z desetiminutových

    … více »
    Zdenek H. | Komentářů: 0
    16.5. 03:11 | Nová verze

    Program pro generování 3D lidských postav MakeHuman (Wikipedie, GitHub) byl vydán ve verzi 1.3.0. Hlavní novinkou je výběr tvaru těla (body shapes).

    Ladislav Hagara | Komentářů: 9
    Podle hypotézy Mrtvý Internet mj. tvoří většinu online interakcí boti.
     (76%)
     (5%)
     (10%)
     (9%)
    Celkem 325 hlasů
     Komentářů: 16, poslední 14.5. 11:05
    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: 230×

    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.