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

    Byl vydán Linux Mint 22.3 s kódovým jménem Zena. Podrobnosti v přehledu novinek a poznámkách k vydání. Vypíchnout lze, že nástroj Systémová hlášení (System Reports) získal mnoho nových funkcí a byl přejmenován na Informace o systému (System Information). Linux Mint 22.3 bude podporován do roku 2029.

    Ladislav Hagara | Komentářů: 0
    včera 21:33 | Nová verze

    Wine bylo po roce vývoje od vydání verze 10.0 vydáno v nové stabilní verzi 11.0. Přehled novinek na GitLabu. Vypíchnuta je podpora NTSYNC a dokončení architektury WoW64.

    Ladislav Hagara | Komentářů: 1
    včera 16:11 | Nová verze

    Byl vydán Mozilla Firefox 147.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Firefox nově podporuje Freedesktop.org XDG Base Directory Specification. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 147 bude brzy k dispozici také na Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 13:22 | Humor

    Asociace repair.org udělila anticeny těm nejhorším produktům představeným na veletrhu CES 2026. Oceněnými jsou například šmírující kamery Amazon Ring AI, chytrý běžecký pás od společnosti Merach, která otevřeně přiznává, že nedokáže zabezpečit osobní data uživatelů, případně jednorázové lízátko, které rozvibrovává čelisti uživatele a tak přehrává hudbu. Absolutním vítězem je lednička od Samsungu, která zobrazuje reklamy a kterou lze otevřít pouze hlasovým příkazem přes cloudovou službu.

    NUKE GAZA! 🎆 | Komentářů: 7
    včera 12:00 | IT novinky

    Íránští protirežimní aktivisté si všímají 30% až 80% ztráty packetů při komunikaci se satelity služby Starlink. Mohlo by se jednat o vedlejší důsledek rušení GPS, kterou pozemní přijímače Starlinku používají k výpočtu polohy satelitů a kterou se režim rovněž snaží blokovat, podle bezpečnostního experta a iranisty Amira Rashidiho je ale pravděpodobnější příčinou terestrické rušení přímo satelitní komunikace Starlinku podobnou

    … více »
    NUKE GAZA! 🎆 | Komentářů: 8
    včera 00:55 | IT novinky

    Evropská komise (EK) zvažuje, že zařadí komunikační službu WhatsApp americké společnosti Meta mezi velké internetové platformy, které podléhají přísnější regulaci podle unijního nařízení o digitálních službách (DSA). Firmy s více než 45 miliony uživatelů jsou podle DSA považovány za velmi velké on-line platformy (Very Large Online Platforms; VLOP) a podléhají přísnějším pravidlům EU pro internetový obsah. Pravidla po

    … více »
    Ladislav Hagara | Komentářů: 16
    včera 00:44 | IT novinky

    Tržní hodnota technologické společnosti Alphabet poprvé v historii přesáhla čtyři biliony dolarů (83 bilionů Kč). Stalo se tak poté, co Apple oznámil, že bude na poli umělé inteligence (AI) spolupracovat s dceřinou firmou Alphabetu, společností Google.

    Ladislav Hagara | Komentářů: 4
    12.1. 11:11 | Zajímavý článek

    Nové číslo časopisu Raspberry Pi zdarma ke čtení: Raspberry Pi Official Magazine 161 (pdf).

    Ladislav Hagara | Komentářů: 0
    12.1. 10:44 | Nová verze

    Po delší době vývoje vyšla nativní linuxová verze virtuálního bubeníka MT-PowerDrumKit 2 ve formátu VST3. Mezi testovanými hosty jsou Reaper, Ardour, Bitwig a Carla.

    balda | Komentářů: 1
    11.1. 21:33 | Nová verze

    Desktopové prostředí Budgie bylo vydáno ve verzi 10.10. Dokončena byla migrace z X11 na Wayland. Budgie 10 vstupuje do režimu údržby. Vývoj se přesouvá k Budgie 11. Dlouho se řešilo, v čem bude nové Budgie napsáno. Budgie 10 je postaveno nad GTK 3. Přemýšlelo se také nad přepsáním z GTK do EFL. Budgie 11 bude nakonec postaveno nad Qt 6.

    Ladislav Hagara | Komentářů: 0
    Které desktopové prostředí na Linuxu používáte?
     (11%)
     (5%)
     (0%)
     (9%)
     (20%)
     (3%)
     (6%)
     (3%)
     (11%)
     (47%)
    Celkem 410 hlasů
     Komentářů: 11, poslední včera 15:18
    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: 284×

    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.