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

    Balík nástrojů Rust Coreutils / uutils coreutils, tj. nástrojů z GNU Coreutils napsaných v programovacím jazyce Rust, byl vydán ve verzi 0.3.0. Z 634 testů kompatibility Rust Coreutils s GNU Coreutils bylo úspěšných 532, tj. 83,91 %. V Ubuntu 25.10 se již používá Rust Coreutils místo GNU Coreutils, což může přinášet problémy, viz například nefunkční automatická aktualizace.

    Ladislav Hagara | Komentářů: 0
    včera 21:00 | IT novinky

    Od 3. listopadu 2025 budou muset nová rozšíření Firefoxu specifikovat, zda shromažďují nebo sdílejí osobní údaje. Po všech rozšířeních to bude vyžadováno někdy v první polovině roku 2026. Tyto informace se zobrazí uživateli, když začne instalovat rozšíření, spolu s veškerými oprávněními, která rozšíření požaduje.

    Ladislav Hagara | Komentářů: 0
    včera 17:11 | Humor

    Jste nuceni pracovat s Linuxem? Chybí vám pohodlí, které vám poskytoval Microsoft, když vás špehoval a sledoval všechno, co děláte? Nebojte se. Recall for Linux vám vrátí všechny skvělé funkce Windows Recall, které vám chyběly.

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

    Společnost Fre(i)e Software oznámila, že má budget na práci na Debianu pro tablety s cílem jeho vyžívání pro vzdělávací účely. Jako uživatelské prostředí bude použito Lomiri.

    Ladislav Hagara | Komentářů: 0
    26.10. 17:11 | IT novinky

    Proběhla hackerská soutěž Pwn2Own Ireland 2025. Celkově bylo vyplaceno 1 024 750 dolarů za 73 unikátních zranitelností nultého dne (0-day). Vítězný Summoning Team si odnesl 187 500 dolarů. Shrnutí po jednotlivých dnech na blogu Zero Day Initiative (1. den, 2. den a 3. den) a na YouTube.

    Ladislav Hagara | Komentářů: 4
    26.10. 13:33 | Komunita

    Byl publikován říjnový přehled dění a novinek z vývoje Asahi Linuxu, tj. Linuxu pro Apple Silicon. Pracuje se na podpoře M3. Zanedlouho vyjde Fedora Asahi Remix 43. Vývojáře lze podpořit na Open Collective a GitHub Sponsors.

    Ladislav Hagara | Komentářů: 0
    25.10. 15:44 | Zajímavý software

    Iniciativa Open Device Partnership (ODP) nedávno představila projekt Patina. Jedná se o implementaci UEFI firmwaru v Rustu. Vývoj probíhá na GitHubu. Zdrojové kódy jsou k dispozici pod licencí Apache 2.0. Nejnovější verze Patiny je 13.0.0.

    Ladislav Hagara | Komentářů: 0
    25.10. 05:11 | Zajímavý článek

    Obrovská poptávka po plynových turbínách zapříčinila, že datová centra začala používat v generátorech dodávajících energii pro provoz AI staré dobré proudové letecké motory, konvertované na plyn. Jejich výhodou je, že jsou menší, lehčí a lépe udržovatelné než jejich průmyslové protějšky. Proto jsou ideální pro dočasné nebo mobilní použití.

    karkar | Komentářů: 9
    24.10. 19:55 | Nová verze

    Typst byl vydán ve verzi 0.14. Jedná se o rozšiřitelný značkovací jazyk a překladač pro vytváření dokumentů včetně odborných textů s matematickými vzorci, diagramy či bibliografií.

    Ladislav Hagara | Komentářů: 0
    24.10. 13:33 | Bezpečnostní upozornění

    Specialisté společnosti ESET zaznamenali útočnou kampaň, která cílí na uživatele a uživatelky v Česku a na Slovensku. Útočníci po telefonu zmanipulují oběť ke stažení falešné aplikace údajně od České národní banky (ČNB) nebo Národní banky Slovenska (NBS), přiložení platební karty k telefonu a zadání PINu. Malware poté v reálném čase přenese data z karty útočníkovi, který je bezkontaktně zneužije u bankomatu nebo na platebním terminálu.

    Ladislav Hagara | Komentářů: 21
    Jaké řešení používáte k vývoji / práci?
     (36%)
     (47%)
     (20%)
     (19%)
     (23%)
     (17%)
     (21%)
     (17%)
     (18%)
    Celkem 279 hlasů
     Komentářů: 14, poslední 14.10. 09:04
    Rozcestník

    Dotaz: for a dvě pole

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

    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: 10
    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: 10
    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: 10
    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.