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í
×
    dnes 04:55 | Zajímavý software

    Microsoft zveřejnil na GitHubu zdrojové kódy MS-DOSu 4.0 pod licencí MIT. Ve stejném repozitáři se nacházejí i před lety zveřejněné zdrojové k kódy MS-DOSu 1.25 a 2.0.

    Ladislav Hagara | Komentářů: 2
    včera 17:33 | Nová verze

    Canonical vydal (email, blog, YouTube) Ubuntu 24.04 LTS Noble Numbat. Přehled novinek v poznámkách k vydání a také příspěvcích na blogu: novinky v desktopu a novinky v bezpečnosti. Vydány byly také oficiální deriváty Edubuntu, Kubuntu, Lubuntu, Ubuntu Budgie, Ubuntu Cinnamon, Ubuntu Kylin, Ubuntu MATE, Ubuntu Studio, Ubuntu Unity a Xubuntu. Jedná se o 10. LTS verzi.

    Ladislav Hagara | Komentářů: 10
    včera 14:22 | Komunita

    Na YouTube je k dispozici videozáznam z včerejšího Czech Open Source Policy Forum 2024.

    Ladislav Hagara | Komentářů: 1
    včera 13:22 | Nová verze

    Fossil (Wikipedie) byl vydán ve verzi 2.24. Jedná se o distribuovaný systém správy verzí propojený se správou chyb, wiki stránek a blogů s integrovaným webovým rozhraním. Vše běží z jednoho jediného spustitelného souboru a uloženo je v SQLite databázi.

    Ladislav Hagara | Komentářů: 0
    včera 12:44 | Nová verze

    Byla vydána nová stabilní verze 6.7 webového prohlížeče Vivaldi (Wikipedie). Postavena je na Chromiu 124. Přehled novinek i s náhledy v příspěvku na blogu. Vypíchnout lze Spořič paměti (Memory Saver) automaticky hibernující karty, které nebyly nějakou dobu používány nebo vylepšené Odběry (Feed Reader).

    Ladislav Hagara | Komentářů: 0
    včera 04:55 | Nová verze

    OpenJS Foundation, oficiální projekt konsorcia Linux Foundation, oznámila vydání verze 22 otevřeného multiplatformního prostředí pro vývoj a běh síťových aplikací napsaných v JavaScriptu Node.js (Wikipedie). V říjnu se verze 22 stane novou aktivní LTS verzí. Podpora je plánována do dubna 2027.

    Ladislav Hagara | Komentářů: 0
    včera 04:22 | Nová verze

    Byla vydána verze 8.2 open source virtualizační platformy Proxmox VE (Proxmox Virtual Environment, Wikipedie) založené na Debianu. Přehled novinek v poznámkách k vydání a v informačním videu. Zdůrazněn je průvodce migrací hostů z VMware ESXi do Proxmoxu.

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

    R (Wikipedie), programovací jazyk a prostředí určené pro statistickou analýzu dat a jejich grafické zobrazení, bylo vydáno ve verzi 4.4.0. Její kódové jméno je Puppy Cup.

    Ladislav Hagara | Komentářů: 0
    24.4. 22:44 | IT novinky

    IBM kupuje společnost HashiCorp (Terraform, Packer, Vault, Boundary, Consul, Nomad, Waypoint, Vagrant, …) za 6,4 miliardy dolarů, tj. 35 dolarů za akcii.

    Ladislav Hagara | Komentářů: 13
    24.4. 15:55 | Nová verze

    Byl vydán TrueNAS SCALE 24.04 “Dragonfish”. Přehled novinek této open source storage platformy postavené na Debianu v poznámkách k vydání.

    Ladislav Hagara | Komentářů: 0
    KDE Plasma 6
     (73%)
     (9%)
     (2%)
     (16%)
    Celkem 779 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Ulozeni a cteni z pole

    29.7.2015 16:40 Lucius
    Ulozeni a cteni z pole
    Přečteno: 421×
    Ahoj, resim takovy problem, potreboval bych ulozit do pole zaznamy ze souboru
    array=($(cat mujsoubor.txt))  <- ve skutecnosti je tam slozitejsi sed a awk, ktery z procesuje soubor a udela vystup viz nize

    mujsoubor.txt radek;654645 jana;13221 andrea;55465 ...

    ted bych potreboval jednotlive radky ulozit do promennych, zkousel jsem
      while IFS=';' read jmeno cislo; do
                    echo $jmeno
                    echo $cislo
            done < ${array[*]}
    Ale bohuzel takto mi to nefunguje, poradite? Zkousim v bashi. Diky

    Odpovědi

    29.7.2015 22:02 NN
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole
    Ja vidim nekolik problemu. Ten cyklus nedava smysl protoze nacitas radky do stale stejnych promennych, tzn. na konci budes mit ulozeny jen posledni radek(najedna se o nacitani do pole array+=('foo')..). Oddelovac IFS je sice dobry napad, ale neni jasne ktere hodnoty chces spojovat. Otazky:
    mujsoubor.txt radek;654645 jana;13221 andrea;55465
    Retezec 'mujsoubor.txt' se nachazi v souboru a je potreba jej vynechat? Soubor obsahuje jeden dlouhy retez nebo radky? Je treba spojit 'radek' a 654645, nebo 654645 a 'jana'? K cemu je pak retezec 'radek'?

    Nezname format vstupniho souboru, ani vystupniho, je mozne, ze cele reseni lze nafromatovat rovnou ze vstupniho souboru, bez zbytecnych cyklu. Konecne pokud se jedna o domaci ulohu, tak ta sem nepatri vubec.
    30.7.2015 14:08 Lucius
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole
    ted jsem to spatne napsal, soubor je ve skutecnosti takoveho tvaru:
    mujsoubor.txt 
    
    radek;654645 
    jana;13221 
    andrea;55465
    Muj cil je tento seznam projet a nacist si pokazde prvni promennou=radek a druhou=654654, atd, dokud jsou tam radky. Omlouvam se za zmateni
    30.7.2015 17:10 NN
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole
    No a co ten 'mujsoubor.txt' a prazdny radek, to se ma vynechat? Btw. to je ten soubor, ktery jsi nacpal do promenne array?

    No idealni by bylo prvni dva radky odstrihnout(sed) a pak to pres tvuj cyklus nacist do pole.
    30.7.2015 17:30 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole
    Vyměň ";" za "=", ulož to do mujsoubor.sh a pak to spusť
    . mujsoubor.sh
    Ta tečka vpředu není překlep, ale příkaz.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    29.7.2015 22:26 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole
    Možná to chce jen drobnou úpravu:
    cat mujsoubor.txt |
        while IFS=';' read cislo jmeno; do
            echo $jmeno
            echo $cislo
        done
    ale stejně by to v AWK bylo rychlejší a pohodlnější:
    cat mujsoubor.txt |
        awk 'BEGIN {RS=";"} {print $2, $1}'
    Ovšem cpát to do pole je nesmysl. Máš k tomu nějaký závažný důvod?
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    1.8.2015 03:32 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole

    Tohle by měla být povinná četba, klidně místo Lojzy Jiráska. ;-)

    1.8.2015 03:38 Kit | skóre: 45 | Brno
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole
    Přečti si ještě jednou původní dotaz a pak mudruj. Místo "cat mujsoubor.txt" tam má výstup z jiného programu.
    Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
    1.8.2015 09:50 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole

    Ne, já budu napřed mudrovat, protože pipeline začínající na cat jednoho souboru je prostě špatný příklad, celkem bez ohledu na okolnosti. Povaluje se na webu v nesčetných obměnách a přijde mi zbytečné přidávat další. Jak si to tazatel upraví, aby mu to četlo pipe z jiného programu, to už je jeho věc.

    1.8.2015 14:51 nobody
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole
    nejspis te chtel navest na :
    <- ve skutecnosti je tam slozitejsi sed a awk, ktery z procesuje soubor a udela vystup viz nize
    2.8.2015 00:15 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole

    Děkuji, ale dobře jsem rozuměl, co tím myslel. Výsledkem ovšem je, že se na webu povalují zase další dva špatné příklady použití cat (který má, pravda, představovat „něco jiného“). Ať tak nebo tak, ty příklady jsou prostě špatné. Když už ne kvůli procesu navíc, tak třeba kvůli subshellu. Pro ilustraci je nejlepší třeba tohle:

    cat /etc/passwd | readarray -t pole_na_hovno
    readarray -t pole_s_daty < /etc/passwd
    

    První pole bude prázdné (protože takhle pipe prostě funguje, forknutý shell nemůže ovlivnit proměnné v tom původním), zatímco to druhé bude definované v „hlavním“ shellu, jak by člověk čekal. Při čtení dat do pole je cat jednoho souboru a následný pipe v podstatě zdrojem chyb číslo jedna. Když nahradíme cat za něco jiného, nijak to nepomůže. Tentýž problém tam bude pořád. Snad jediný případ, kdy cat jednoho souboru dává smysl, je něco takového:

    { sed 's/\(^[^:]\+\):/another\1:/' /etc/passwd; cat /etc/passwd; } | další | zpracování
    

    Tohle^^^ je samozřejmě ptákovina, ale umím si představit, že by to s drobnou obměnou mohlo dělat něco smysluplného. Možná je ale přehlednější tohle:

    cat <(sed 's/\(^[^:]\+\):/another\1:/' /etc/passwd) /etc/passwd | další | zpracování
    

    A to už není cat jednoho souboru, takže to je celkem OK. První možnost může být o něco efektivnější, protože výstup ze sedu nemusí přežvýkat cat. Pokud ovšem cat i shell používají v tomto případě splice(), je to nakonec jedno, co do efektivity.

    1.8.2015 03:00 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole

    První a nejsnazší možnost je tohle:

    while read line; do
        IFS=';' read jmeno cislo <<<"${line}"
        echo "Jméno: ${jmeno}"
        echo "Číslo: ${cislo}"
    done < mujsoubor.txt
    

    Pokud chceš experimentovat s polem a načíst si řádky napřed do pole, to je samozřejmě taky možné:

    readarray -t lines < mujsoubor.txt
    for line in "${lines[@]}"; do
        IFS=';' read jmeno cislo <<<"${line}"
        echo "Jméno: ${jmeno}"
        echo "Číslo: ${cislo}"
    done
    

    Pro úplnost dodávám, že vstupní soubor vypadá takto…

    radek;654645 
    jana;13221 
    andrea;55465
    

    …a výstup z tohoto „parseru“ vypadá v obou případech takto:

    Jméno: radek
    Číslo: 654645
    Jméno: jana
    Číslo: 13221
    Jméno: andrea
    Číslo: 55465
    

    Všechny výše uvedené parametry jsou popsané v man bash; stačí si najít kapitolu zvanou Shell Builtin Commands, která je tam někde ke konci.

    Jo a mimochodem, pole přináší jistý bonus navíc v podobě indexů, které můžeš použít třeba pro následující trik, chceš-li:

    readarray -t lines < mujsoubor.txt
    echo "Počet položek adresáře: ${#lines[@]}"
    for index in "${!lines[@]}"; do
        IFS=';' read jmeno cislo <<<"${lines[index]}"
        echo "$((index + 1)). záznam: Jméno: ${jmeno} Číslo: ${cislo}"
    done
    
    Výstup z posledního skriptu bude pak následující:
    Počet položek adresáře: 3
    1. záznam: Jméno: radek Číslo: 654645 
    2. záznam: Jméno: jana Číslo: 13221 
    3. záznam: Jméno: andrea Číslo: 55465
    

    Z výše uvedeného už snad nebude problém nějaký vhodný parsovací skript vymyslet. :-)

    1.8.2015 03:05 Andrej | skóre: 51 | blog: Republic of Mordor
    Rozbalit Rozbalit vše Re: Ulozeni a cteni z pole

    Aha! Příliš jsem se nechal unést iterací přes pole a parsováním řádků za každou cenu. On ale read sám od sebe umí všechno potřebné, takže ještě kratší (se stejným výstupem) bude tohle:

    while IFS=';' read jmeno cislo; do
      echo "Jméno: ${jmeno}"
      echo "Číslo: ${cislo}"
    done < mujsoubor.txt
    

    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.