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í
×
eParkomat, startup z ČR, postoupil mezi finalisty evropského akcelerátoru ChallengeUp!
Robot na pivo mu otevřel dveře k opravdovému byznysu
Internet věcí: Propojený svět? Už se to blíží...
včera 17:02 | Pozvánky

Přijďte si popovídat o open source obecně a openSUSE konkrétně s dalšími uživateli a vývojáři. Oslava nového vydání openSUSE Leap se uskuteční 16. prosince od 17:00 v nových prostorách firmy SUSE v Praze. K dispozici bude nějaké občerstvení a DVD pro ty, kdo je sbírají nebo ještě mají mechaniku. Po párty v kanceláři se bude pokračovat v některé z hospod v okolí.

Miška | Komentářů: 7
včera 14:55 | Zajímavý software

Byla vydána verze Alpha 1.0 otevřeného operačního systému pro chytré hodinky AsteroidOS. Podporovány jsou hodinky LG G Watch, LG G Watch Urbane, Asus ZenWatch 2 a Sony Smartwatch 3. Ukázka ovládání hodinek na YouTube. Jaroslav Řezník přednášel o AsteroidOS na chytrých hodinkách (videozáznam) na letošní konferenci OpenAlt.

Ladislav Hagara | Komentářů: 0
včera 13:30 | Zajímavý software

Byly uvolněny zdrojové kódy známé rogue-like hry DoomRL. Počátky hry jsou v roce 2002. Je napsána ve FreePascalu a zdrojový kód je nyní k dispozici na GitHubu pod licencí GNU GPL 2.0. Autor pracuje na nové hře Jupiter Hell, která je moderním nástupcem DoomRL a na jejíž vývoj shání peníze prostřednictvím Kickstarteru.

Blaazen | Komentářů: 0
včera 13:15 | Pozvánky

Přijďte s námi oslavit vydání Fedory 25. Na programu budou přednášky o novinkách, diskuse, neřízený networking atd. Release Party se bude konat 16. prosince v prostorách společnosti Etnetera. Na party budou volně k dispozici také propagační materiály, nová DVD s Fedorou 25 a samozřejmě občerstvení. Přednášky budou probíhat v češtině. Pro více informací se můžete podívat na web MojeFedora.cz. Jen připomínám, že tentokrát jsme zavedli

… více »
frantisekz | Komentářů: 0
9.12. 16:38 | Komunita

Byly zveřejněny videozáznamy přednášek a workshopů z letošní konference OpenAlt konané 5. a 6. listopadu v Brně. K videozáznamům lze přistupovat ze stránky na SuperLectures nebo přes program konference, detaily o vybrané přednášce nebo workshopu a dále kliknutím na ikonku filmového pásu. Celkově bylo zpracováno 65 hodin z 89 přednášek a workshopů.

Ladislav Hagara | Komentářů: 0
9.12. 11:30 | Komunita

Bylo oznámeno, že bude proveden bezpečnostní audit zdrojových kódů open source softwaru pro implementaci virtuálních privátních sítí OpenVPN. Audit provede Matthew D. Green (blog), uznávaný kryptolog a profesor na Univerzitě Johnse Hopkinse. Auditována bude verze 2.4 (aktuálně RC 1, stabilní verze je 2.3.14). Audit bude financován společností Private Internet Access [reddit].

Ladislav Hagara | Komentářů: 4
9.12. 06:00 | Komunita

Na YouTube byl publikován Blender Institute Reel 2016, ani ne dvouminutový sestřih z filmů, které vznikly za posledních 10 let díky Blender Institutu. V institutu aktuálně pracují na novém filmu Agent 327. Dění kolem filmu lze sledovat na Blender Cloudu. Videoukázka Agenta 327 z června letošního roku na YouTube.

Ladislav Hagara | Komentářů: 0
9.12. 01:02 | Zajímavý článek

Minulý týden byly vydány verze 1.2.3 a 1.1.7 webového poštovního klienta Roundcube. V oznámení o vydání bylo zmíněno řešení bezpečnostního problému nalezeného společností RIPS a souvisejícího s voláním funkce mail() v PHP. Tento týden byly zveřejněny podrobnosti. Útočník mohl pomocí speciálně připraveného emailu spustit na serveru libovolný příkaz. Stejně, jak je popsáno v článku Exploit PHP’s mail() to get remote code execution z roku 2014.

Ladislav Hagara | Komentářů: 1
8.12. 16:00 | Nová verze

Byla vydána verze 0.98 svobodného nelineárního video editoru Pitivi. Z novinek lze zmínit například přizpůsobitelné klávesové zkratky. Videoukázka práce s nejnovější verzí Pitivi na YouTube.

Ladislav Hagara | Komentářů: 1
8.12. 15:00 | Zajímavý software

Stop motion je technika animace, při níž je reálný objekt mezi jednotlivými snímky ručně upravován a posouván o malé úseky, tak aby po spojení vyvolala animace dojem spojitosti. Jaký software lze pro stop motion použít na Linuxu? Článek na OMG! Ubuntu! představuje Heron Animation. Ten bohužel podporuje pouze webové kamery. Podpora digitálních zrcadlovek je začleněna například v programu qStopMotion.

Ladislav Hagara | Komentářů: 5
Kolik máte dat ve svém domovském adresáři na svém primárním osobním počítači?
 (32%)
 (23%)
 (29%)
 (7%)
 (5%)
 (3%)
Celkem 810 hlasů
 Komentářů: 50, poslední 29.11. 15:50
Rozcestník
Reklama

Dotaz: Ulozeni a cteni z pole

29.7.2015 16:40 Lucius
Ulozeni a cteni z pole
Přečteno: 358×
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: 37 | 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: 37 | 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: 43 | blog: Republic of Mordor | Zürich
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: 37 | 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: 43 | blog: Republic of Mordor | Zürich
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: 43 | blog: Republic of Mordor | Zürich
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: 43 | blog: Republic of Mordor | Zürich
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: 43 | blog: Republic of Mordor | Zürich
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.