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í
×

včera 01:23 | Komunita

Phoronix spustil 2017 Linux Laptop Survey. Tento dotazník s otázkami zaměřenými na parametry ideálního notebooku s Linuxem lze vyplnit do 6. července.

Ladislav Hagara | Komentářů: 2
23.6. 22:44 | Nová verze

Po třech měsících vývoje od vydání verze 5.5.0 byla vydána verze 5.6.0 správce digitálních fotografií digiKam (digiKam Software Collection). Do digiKamu se mimo jiné vrátila HTML galerie a nástroj pro vytváření videa z fotografií. V Bugzille bylo uzavřeno více než 81 záznamů.

Ladislav Hagara | Komentářů: 1
23.6. 17:44 | Nová verze

Byla vydána verze 9.3 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. Představení nových vlastností v příspěvku na blogu a na YouTube.

Ladislav Hagara | Komentářů: 3
23.6. 13:53 | Nová verze

Simon Long představil na blogu Raspberry Pi novou verzi 2017-06-21 linuxové distribuce Raspbian určené především pro jednodeskové miniaturní počítače Raspberry Pi. Společně s Raspbianem byl aktualizován také instalační nástroj NOOBS (New Out Of the Box Software). Z novinek lze zdůraznit IDE Thonny pro vývoj v programovacím jazyce Python a především offline verzi Scratche 2.0. Ten bylo dosud možné používat pouze online. Offline bylo možné používat pouze Scratch ve verzi 1.4. Z nového Scratchu lze ovládat také GPIO piny. Scratch 2.0 vyžaduje Flash.

Ladislav Hagara | Komentářů: 1
22.6. 14:24 | Nová verze

Opera 46, verze 46.0.2597.26, byla prohlášena za stabilní. Nejnovější verze tohoto webového prohlížeče je postavena na Chromiu 59. Z novinek lze zmínit například podporu APNG (Animated Portable Network Graphics). Přehled novinek pro vývojáře na blogu Dev.Opera. Oznámení o vydání zmiňuje také první televizní reklamu.

Ladislav Hagara | Komentářů: 0
22.6. 13:37 | IT novinky

I čtenáři AbcLinuxu před dvěma lety vyplňovali dotazníky věnované Retro ThinkPadu. Nyní bylo potvrzeno, že iniciativa Retro ThinkPad je stále naživu a Lenovo připravuje speciální edici ThinkPadu jako součást oslav jeho 25. výročí.

Ladislav Hagara | Komentářů: 27
22.6. 10:22 | Komunita

Bylo oznámeno, že frontend a runtime programovacího jazyka D bude začleněn do kolekce kompilátorů GCC (GNU Compiler Collection). Správcem byl ustanoven Iain Buclaw.

Ladislav Hagara | Komentářů: 7
21.6. 18:47 | IT novinky
Bulharská firma Olimex je známá jako výrobce kvalitních mini arm desek, u nichž se snaží být maximálně open source. Kromě velké otevřenosti taktéž zaručují dlouhodobou podporu výroby, což je vítáno ve firemním prostředí. Nyní firma ohlásila ESP32-GATEWAY, malou IoT desku s Wifi, Bluetooth, Ethernetem a 20 GPIO porty za 22EUR. Tato malá deska je ořezanou verzí ESP32-EVB.
Max | Komentářů: 21
21.6. 18:00 | Zajímavý článek

LinuxGizmos (v dubnu loňského roku přejmenován na HackerBoards a v lednu letošního roku zpět na LinuxGizmos) zveřejnil výsledky čtenářské ankety o nejoblíbenější jednodeskový počítač (SBC) v roce 2017. Letos se vybíralo z 98 jednodeskových počítačů (Tabulky Google). Nejoblíbenějšími jednodeskovými počítači v letošním roce jsou Raspberry Pi 3 Model B, Raspberry Pi Zero W a Raspberry Pi 2 Model B.

Ladislav Hagara | Komentářů: 0
21.6. 14:22 | Pozvánky

Ne-konference jOpenSpace 2017 se koná od 13. do 15. října 2017 v hotelu Farma u Pelhřimova. Registrace účastníků je nutná. Více informací na stránkách ne-konference.

Zdenek H. | Komentářů: 0
Chystáte se pořídit CPU AMD Ryzen?
 (6%)
 (31%)
 (1%)
 (9%)
 (44%)
 (9%)
Celkem 837 hlasů
 Komentářů: 65, poslední 1.6. 19:16
    Rozcestník

    Dotaz: for a dvě pole

    11.1.2011 01:01 jsk | skóre: 7
    for a dvě pole
    Přečteno: 309×

    Dobrý den,

    potřeboval bych poradit jak zjednodušit násl. úlohu tak, aby pro každou hodnotu z dvojice $prvni a $druhy nemusel vypisovat vlastní for pro všechny indexy.

    prvni=(`cat soubor1`)
    druhy=(`cat soubor2`)
    for ikx in $( seq ${prvni[0]} )
    do 'třeba wget' "${ikx}${druhy[0]}"
    done

    $prvni a $druhy mají stejný počet hodnot, $prvni je cele kladné číslo a $druhy je text.

    Měl jsem dojem, že by šlo využít toho, že hodnoty indexu jsou pro jednotlivé cykly for stejné, ale to mi přišlo jako speciální případ a zatím ani nevím jak na to.

    S načítanými soubory (soubor1 a soubor2) mohu volně manipulovat a případně je přizpůsobit.

    Předem všem děkuji!

    jsk

    Odpovědi

    11.1.2011 08:33 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: for a dvě pole
    Pomůže toto:?
    #!/bin/bash
    #vstup
    IN1="kuk baf bum"
    IN2="KUK BAF BUM"
    
    #priprava pole
    saveIFS=$IFS
    IFS=" "
    ARR1=( $IN1 )
    ARR2=( $IN2 )
    IFS=$saveIFS
    
    #pocet prvku
    CNT=${#ARR1[&]}
    
    #kontrola prvku v obou polich
    if [ ${CNT} -ne ${#ARR2[&]} ]; then
      echo "Error: cnt1 != cnt2"
      exit 3
    fi
    
    #zpracovani
    for (( i=0; i<${CNT}; i++ )); do
      echo "${ARR1[$i]} - ${ARR2[$i]} "
    done
    
    exit 0
    
    Pro oddělovač řádků místo mezery:
    IFS="
    "
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    David Watzke avatar 11.1.2011 08:47 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: for a dvě pole
    Počet prvků je takhle:
    ${#ARR1[*]}
    nebo případně
    ${#ARR1[@]}
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    11.1.2011 10:35 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: for a dvě pole
    Sorry, to byla chyba při záměně za HTML entity (proč jsem vyměnil @ za &amp;, nevím) :(
    Oprava:
    #!/bin/bash
    #vstup
    IN1="kuk baf bum"
    IN2="KUK BAF BUM"
    
    #priprava pole
    saveIFS=$IFS
    IFS=" "
    ARR1=( $IN1 )
    ARR2=( $IN2 )
    IFS=$saveIFS
    
    #pocet prvku
    CNT=${#ARR1[@]}
    
    #kontrola prvku v obou polich
    if [ ${CNT} -ne ${#ARR2[@]} ]; then
      echo "Error: cnt1 != cnt2"
      exit 3
    fi
    
    #zpracovani
    for (( i=0; i<${CNT}; i++ )); do
      echo "${ARR1[$i]} - ${ARR2[$i]} "
    done
    
    exit 0
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    11.1.2011 11:09 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: for a dvě pole

    Zdravim,

    ja tu mam tiez jedno riesenie a ci idealne, tak to zalezi na okolnostiach:

     

    #! /bin/bash

    mapfile -t PRVNI <./soubor1
    mapfile -t DRUHY <./soubor2

    while [[ -n "${PRVNI[0]}" && ${#PRVNI[@]} -eq ${#DRUHY[@]} ]]
    do
    echo "Aktualna dvojica: ${PRVNI[0]} - ${DRUHY[0]}"
    unset PRVNI[0]
    PRVNI=( ${PRVNI[@]} )
    unset DRUHY[0]
    DRUHY=( ${DRUHY[@]} )
    done

    Vyhody: Aj napriek nerovnakemu poctu clenov v jednom ci druhom subore,f popari, co sa da a az ked nenajde dvojicu, skonci. Co je zaroven jediny mozny koniec.

    Nevyhody: Polia budu na konci cyklu prazdne a teda pri voli dalsieho pouzitia by bolo znova nutne nacitat zo suboru (velmi zle :)) . Toto sa da obist za cenu vytvorenia docasnych poli.  Pre kazde jedno povodne vytvorit jedno docasne priamo vo funkcii. Pole bude platne len v ramci funkcie.                     PRVNI_TMP=(  ${PRVNI[@]} )

    #! /bin/bash

    Prirad()
    {
    declare -a PRVNI_TMP=( ${PRVNI[@]} )
    declare -a DRUHY_TMP=( ${DRUHY[@]} )

    while [[ -n "${PRVNI_TMP[0]}" && ${#PRVNI_TMP[@]} -eq ${#DRUHY_TMP[@]} ]]
    do
    echo "Aktualna dvojica: ${PRVNI_TMP[0]} - ${DRUHY_TMP[0]}"
    unset PRVNI_TMP[0]
    PRVNI_TMP=( ${PRVNI_TMP[@]} )
    unset DRUHY_TMP[0]
    DRUHY_TMP=( ${DRUHY_TMP[@]} )
    done
    }

    mapfile -t PRVNI <./soubor1
    mapfile -t DRUHY <./soubor2
    Prirad

    Nevravim, ze idealne, ale riesenie to je.

    
                
    11.1.2011 12:13 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: for a dvě pole

    Oprava:

    Cyklus ma byt nasledovne:

    while [[ -n "${PRVNI[0]}" && -n "${DRUHY[0]}" ]]

    aby to malo tu mnou spominanu "vyhodu". Je nutne vediet, ci tie dva prvky z prveho a druheho pola maju nejaku spojitost (meno a priezvisko a pod.).

    12.1.2011 06:14 jsk | skóre: 7
    Rozbalit Rozbalit vše Re: for a dvě pole

    Zdravím,
    pokusím se vysvětlit souvislost prvků mám-li např.
    S1=(1 2 3 4 7 8 9 10 11)
    a
    S2=(100 83 150 230 11 18 22 55 99)
    pro S1[0] se provede činnost 100×

    Asi jsem to původně popsal dost neobratně :-(

    jsk

    12.1.2011 08:19 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: for a dvě pole
    Učím se rozumět řeči tvého kmene, dává toto co je třeba? :):
    #!/bin/bash
    #vstup
    IN1="kuk baf bum klof nic nic2"
    IN2="3 1 7 2 pepa"
    
    #priprava pole
    saveIFS=$IFS
    IFS=" "
    ARR1=( $IN1 )
    ARR2=( $IN2 )
    IFS=$saveIFS
    
    #pocet prvku
    CNT1=${#ARR1[@]}
    CNT2=${#ARR2[@]}
    if [ ${CNT2} -lt ${CNT1} ]; then
      MAX=${CNT2}
    else
      MAX=${CNT1}
    fi
    
    #zpracovani
    for (( i=0; i<${MAX}; i++ )); do
      NUM_MAX=$(( ${ARR2[$i]} + 0 ))
      for  (( j=0; j<${NUM_MAX}; j++ )); do
        echo "${ARR1[$i]} - $(($j+1))"
      done
    done
    
    exit 0
    
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    David Watzke avatar 11.1.2011 20:14 David Watzke | skóre: 74 | blog: Blog... | Praha
    Rozbalit Rozbalit vše Re: for a dvě pole
    To s tím unsetem je to slušná chlívárna, radši použij for a nic "neunsetuj".
    “Being honest may not get you a lot of friends but it’ll always get you the right ones” ―John Lennon
    11.1.2011 23:30 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: for a dvě pole

    Tiez si myslim. ;(

    11.1.2011 22:05 jsk | skóre: 7
    Rozbalit Rozbalit vše Re: for a dvě pole

    Zdravím a děkuji všem,

    nejsem si zcela jistý, že jsem problém správně popsal, pro hodnotu na pozici v $soubor1 potřebuji, aby proběhlo zpracování pro všechny hodnoty v rozsahu od 1 až po hodnotu stejné pozice v soubor2, takže na jeden průchod prvním for potřebuji více průchodů ve druhém for. Měl jsem na mysli jako něco viz. níže, ale to mi nepokryje v druhém cyklu všechny případy, prostě mi to nepodrží zet. 20 = počet řádků.

    prvni=(`cat soubor1`)
    druhy=(`cat soubor2`)

    then for zet in ( 1 2 ... 20} )
    do for ikx in $( seq ${prvni[$zet]} ) ; do 'třeba wget' "neco${ikx}a_neco_jineho${druhy[$zet]}" ; done
    done

    Dostal jsem se k domácímu kompu teprve teď, takže jsem se možná ne všechny hned reakce pochopil správně, používám BASH nárazově a moc toho zatím neumím.

    jsk

    11.1.2011 22:39 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: for a dvě pole
    Nemluvím [plně řečí tvého kmene, ale pomůže?:
    #!/bin/bash
    #vstup
    IN1="kuk baf bum bac snup nic"
    IN2="KUK BAF BUM BAC SNUP"
    
    #priprava pole
    saveIFS=$IFS
    IFS=" "
    ARR1=( $IN1 )
    ARR2=( $IN2 )
    IFS=$saveIFS
    
    #pocet prvku
    CNT1=${#ARR1[@]}
    CNT2=${#ARR2[@]}
    
    #zpracovani
    for (( i=0; i<${CNT1}; i++ )); do
      if [ $i -lt ${CNT2} ]; then
        for  (( j=0; jlt;=i; j++ )); do
          echo "${ARR1[$i]} - ${ARR2[$j]}"
        done
      fi
    done
    
    exit 0
    
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    11.1.2011 23:12 jsk | skóre: 7
    Rozbalit Rozbalit vše Re: for a dvě pole

    Díky,
    asi to není úplně snadné porozumět tomu co jsem napsal :(, snažil jsem se to popsat obecně, abych se nedobral k řešení postaveném na něčem zcela specifickém a mimochodem jsem to v pův. zadání napsal špatně, na vstupu jsou čísla.
    Nerozumím úplně řádkům 19 a 20 hlavně -lt a jlt;=i mi není jasné, IFS jsem zřejmě již pochopil, ale vypadá to, že je to ono, pro každé i se provede j průchodů a i i j mohu vložit jako proměnou do url které dávám wget-u, zde echo.

    Konkrétní test provedu až zítra, teď už musím končit, ještě jednou děkuji!!

    Zdraví jsk

    11.1.2011 23:44 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
    Rozbalit Rozbalit vše Re: for a dvě pole
    if [ $i -lt ${CNT2} ]; then
      #dělej toto pokud $i je menší (l-ower t-hen) než $CNT
      #viz man test
    fi
    
    No k 20tému řádku, nevím jak to dneska dělám ale již podruhé v této diskuzi při záměně znaků za html entity to nějak sprasím.
    Oprava:
    #!/bin/bash
    #vstup
    IN1="kuk baf bum bac snup nic"
    IN2="KUK BAF BUM BAC SNUP"
     
    #priprava pole
    saveIFS=$IFS
    IFS=" "
    ARR1=( $IN1 )
    ARR2=( $IN2 )
    IFS=$saveIFS
     
    #pocet prvku
    CNT1=${#ARR1[@]}
    CNT2=${#ARR2[@]}
     
    #zpracovani
    for (( i=0; i<${CNT1}; i++ )); do
      if [ $i -lt ${CNT2} ]; then
        for  (( j=0; j<=$i; j++ )); do
          echo "${ARR1[$i]} - ${ARR2[$j]}"
        done
      fi
    done
     
    exit 0
    
    Vlastni for může být realizovan i takto, přijde na to co se má stát když nemají pole stejný počet prvků.
    #zpracovani
    for (( i=0; i<${CNT1}; i++ )); do
      if [ $i -lt ${CNT2} ]; then
        k=$i
      else
        k=$((${CNT2} - 1))
      fi
      for  (( j=0; j<=$k; j++ )); do
        echo "${ARR1[$i]} - ${ARR2[$j]}"
      done
    done
    
    To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
    11.1.2011 23:45 Patrik Uhrak | skóre: 31 | blog: pato
    Rozbalit Rozbalit vše Re: for a dvě pole

    Zdravim,

    19. riadok : -lt , -gt , -le, -ge, -ne, -eq  : su pre porovnavanie celociselnych hodnot (integer)

    20. riadok : Tam je preklep, spravne by mal byt takto zrejme:  for  (( j=0; j<=${i}; j++ )); do

    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.