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

    Programovací jazyk Python byl vydán v nové major verzi 3.15.0. Podrobný přehled novinek v aktualizované dokumentaci.

    Ladislav Hagara | Komentářů: 0
    včera 22:33 | Zajímavý projekt

    BIGWORDS.PAGE je open-source webová aplikace, která po otevření odkazu v prohlížeči vykreslí přes celou obrazovku jednoduché informační sdělení. Zpráva i její nastavení jsou uložené v části URL za znakem #, například odkaz https://bigwords.page/#abclinuxu zobrazí jako velký bílý nápis 'abclinuxu' na černém pozadí. Obsah odkazu lze upravovat i vestavěným editorem, ten umožňuje nastavovat formátování a vizuální efekty textu, časovače, QR kódy a obrázky. Zdrojový kód je dostupný pod licencí MIT na GitHubu.

    ❗Červivý Hřib krade❗ | Komentářů: 7
    včera 11:55 | Upozornění

    V neděli 11. října proběhne rotace klíče kořenové zóny. Podruhé v historii. Ondřej Filip na blogu CZ.NIC: "Pokud je pro Vás DNS protokol spíše výzva, ale přesto spravujete nějakou síť či DNS resolver, zkuste si jednoduchý test, který připravila firma Cloudflare na této adrese. Obzvláště zbystřit byste měli, pokud uvidíte nějaká červená políčka."

    Ladislav Hagara | Komentářů: 13
    včera 09:55 | IT novinky

    Vláda Spojených států se rozhodla vyřadit americkou softwarovou společnost Microsoft a několik dalších velkých technologických podniků z programu, který umožňuje kvalifikovaným zahraničním pracovníkům získat povolení k trvalému pobytu. Oznámila to včera administrativa amerického prezidenta Donalda Trumpa. Opatření zdůvodnila rozsáhlým zneužíváním programu, který je dlouhodobě terčem kritiky ze strany Trumpových příznivců, neboť prý znevýhodňuje americké pracovníky.

    Ladislav Hagara | Komentářů: 11
    včera 09:44 | IT novinky

    Datové centrum největší ruské technologické společnosti Jandex v Rjazaňské oblasti se stalo cílem dronového útoku a zastavilo provoz. Jandexu se někdy přezdívá „ruský Google“. Provozuje nejoblíbenější internetový vyhledávač v Rusku nebo aplikace pro objednávky jídla a taxi. Využívají jej desítky milionů lidí v rusky mluvících zemích.

    Ladislav Hagara | Komentářů: 11
    včera 09:33 | Nová verze

    Francouzská společnost Mistral AI představila Mistral Large 4 (interně přezdívaný 'le Chonk', volně přeloženo 'pořádný macek'), 'open-weight multimodální hybridní instruct-and-reasoning model s architekturou granulárního MoE, nativně podporující více jak 160 jazyků'. Model má přes jeden bilión parametrů, z nichž při práci využívá 49 miliard, kontextové okno o délce milion tokenů a obrazový enkodér o 1,6 miliardách parametrů.

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 2
    včera 03:22 | Nová verze

    Svobodný multiplatformní herní engine Bevy napsaný v Rustu byl vydán ve verzi 0.20. Díky 227 přispěvatelům.

    Ladislav Hagara | Komentářů: 0
    včera 03:11 | Komunita

    Simon Long oznámil Raspberry Pi Desktop pro PC a Mac s Intelem postavený na aktualizovaném Debianu 13 Trixie. S klientem Raspberry Pi Connect pro vzdálenou správu. Ke stažení je vedle Raspberry Pi OS pro Raspberry Pi.

    Ladislav Hagara | Komentářů: 1
    8.10. 21:33 | Zajímavý projekt

    ESP32-C3 adblock přemění lacinou vývojovou desku ESP32‑C3 na samostatný DNS blokovač nejenom reklamních domén, minimalistickou alternativu k populárnímu Pi-hole. ESP32-C3 adblock místo objemných názvů domén ukládá jejich 40-bitové FNV-1a hashe do flash paměti, které pak binárně prohledává, kontrola jedné domény trvá přibližně 10 milisekund. Blocklist pojme až 537 tisíc domén a lze jej spravovat přes webové rozhraní. Projekt zatím

    … více »
    ❗Červivý Hřib krade❗ | Komentářů: 0
    8.10. 21:00 | Zajímavý software

    ArtCraft je sada open source aplikací pro práci s obrázky a videi "inspirovaných" aplikacemi od Adobe. Napsaných v Rustu. Pro MacOS, Windows i Linux. Běží také ve webovém prohlížeči. Aktuálně se jedná o 7 aplikací: PhotoCraft (Photoshop), VectorCraft (Illustrator), FilmCraft (Premiere Pro), LightCraft (Lightroom), PdfCraft (Acrobat), EffectCraft (After Effects) a DesignCraft (InDesign). Zdrojové kódy jsou k dispozici na GitHubu.

    Ladislav Hagara | Komentářů: 10
    Které desktopové prostředí na Linuxu používáte?
     (9%)
     (7%)
     (4%)
     (21%)
     (29%)
     (8%)
     (5%)
     (2%)
     (14%)
     (20%)
    Celkem 2823 hlasů
     Komentářů: 31, poslední 13.8. 00:27
    Rozcestník

    Dotaz: Bash - sort databáze v proměné typu pole

    30.5.2010 22:18 Adam Výborný
    Bash - sort databáze v proměné typu pole
    Přečteno: 1520×
    Zdravím, mám soubor reky.csv, který vypadá asi takhle:
    ;jmeno;delka;povodi;prutok;usti do;staty
    1.;Amazonka  - Ucayali  - Apurimac;7062;6915000;219000;Atlantsky ocean;Brazilie, Peru, Bolivie, Kolumbie, Ekvador, Venezuela, Guyana
    2.;Nil;6695;2870000;5100;Stredozemni more;Etiopie, Eritrea, Sudan, Uganda, Tanzanie, Kena, Rwanda, Burundi, Egypt, Demokraticka republika Kongo
    3.;Jang-c-tiang;6300;1800000;31900;Vychodocinske more;CLR
    4.;Mississippi - Missouri;6275;2980000;16200;Mexicky zaliv;USA (98.5%), Kanada (1.5%)
    5.;Jenisej - Angara - Selenga;5539;2580000;19600;Karske more;Rusko, Mongolsko
    
    Jde mi o to aby se taot databaze v terminalu vypasala a nabidla serazeni podle povodi, prutoku a delky (standartne je serazena podle abecedy). Vyskytli se mi vsak dva probleme. Tim prvnim je vubec design databaze, rozhodl jsem se, ze za nazev reky doplnim urcitej pocet mezer aby vsechny delky rek zacinali na stejnem miste. Zatim se mi povedlo pouze napsat for cyklus ktery zjisti kolik znaku ma nazev nejdelsi reky, nyni potrebuju nejaky cyklus ktery by zjistil pocet znaku urcite reky, odecetl tento pocet od poctu znaku nejdelsi reky a ten vysledny rozdil by byl pocet mezer, ktere by cyklus za ten nazev reky dosadil. Druhy problem je u samotneho menu a sortovani. Podarilo se mi nahazet kazdy sloupec do jedne promene typu array, co policko to jedo array pole. Nyni potrebuju nejaky menu (Pokud chcete seradit podle blabla dejte napiste jednicku, pokud podle blabla napiste dvojku...) - tudis asi read -p a IF. Nasledne vsak tu nejtezsi cast to podle toho seradit, kdyz dam sort podle povodi, potrebuju aby se pak prehazeli i ostani sloupce aby bylo u kazdeho povodi spravny nazev reky a dalsi informace. V tom by imho meli pomoc indexi polí. Nic méně nemůžu přijít jak na to. Doufám, že si s tím někdo poradí, předem děkuji za všechny rady. Zde už zmíněný skript, s postupem ke kterému, jsem se dopracoval sám:
    #!/bin/bash
    
    declare x
    declare -a y
    declare z
    declare pozice
    declare -a idecko
    declare -a jmena
    declare -a delka
    declare -a povodi
    declare -a prutok
    
    
    IFS=$'\n';
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f1 -d';' ); do idecko[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f2 -d';' ); do jmena[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f3 -d';' ); do delka[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f4 -d';' ); do povodi[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f5 -d';' ); do prutok[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    y=0
    z=0
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f2 -d';' ); do
            y[$pozice]=$x &&
            if [ $z -lt ${#y[$pozice]} ]; then
                    z=${#y[$pozice]} && pozice=$((pozice + 1));
            fi
    done
    
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" );
            do echo -n -e " ${idecko[$pozice]} \t"
            ${jmena[$pozice]}
            echo "${delka[$pozice]} ${povodi[$pozice]} ${prutok[$pozice]}" && pozice=$((pozice + 1));
    done
    

    Odpovědi

    30.5.2010 22:46 fraxinus | skóre: 20 | blog: fraxinus
    Rozbalit Rozbalit vše Re: Bash - sort databáze v proměné typu pole
    ja by som to robil tak, ze podla toho podla ktoreho stlpca chce triedit by som ten stlpec skopiroval na zaciatok, napr. ak podla povodi tak z tohoto:

    ;jmeno;delka;povodi;prutok;usti do;staty

    by vzniklo toto

    povodi;jmeno;delka;povodi;prutok;usti do;staty

    potom by som to jednoducho prehnal cez sort -n a potom by som vypisal vsetko okrem toho prveho stlpca ktory je duplicitny
    30.5.2010 23:09 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Bash - sort databáze v proměné typu pole
    sort -t\; -k 3 -k 5 -k 10
    30.5.2010 23:02 Ash | skóre: 53
    Rozbalit Rozbalit vše Re: Bash - sort databáze v proměné typu pole
    Škoda že jste to nerozdělil na víc dotazů, např. jak vytvořit řetězec mezer délky "délka X - délka nějaké proměnné" apod., takto dlouze popsané "problémy" asi moc lidí nebude bavit číst :)

    cyklus ktery by zjistil pocet znaku urcite reky, odecetl tento pocet od poctu znaku nejdelsi reky a ten vysledny rozdil by byl pocet mezer

    Délku řetězce zjistíte v Bashi ${#promenna}, pokud je to v poli tak ${#pole[$index]}. Takže:
    mezery=""
    for((i=${#promennaobsahujicijmenoreky}; $i<$delkanejdelsireky; i++)); do
      mezery=" $mezery"
    done
    echo "'$mezery'"
    
    K tomu:

    read -p a IF

    to by šlo
    read -p "Zvolte a nebo b"
    case $REPLY in
      a)
        delejneco
        ;;
      b)
        delejnecojineho
        ;;
      *)
        chybnavolba
        ;;
    esac
    
    ale s ohledem na možnost překlepu by to asi chtělo do while cyklu apod, no a nebo zkuste třeba select
    PS3="Vaše volba: "
    select i in a b exit; do 
      [[ "$i" == "exit" ]] && break
      echo "$i"
    done
    
    Řazení podle něčeho jsem přesně nepochopil, nestačil by sort podle určitého sloupce? sort -k N
    31.5.2010 00:28 Ant
    Rozbalit Rozbalit vše Menu v shell scriptech
    Nyni potrebuju nejaky menu (Pokud chcete seradit podle blabla dejte napiste jednicku, pokud podle blabla napiste dvojku...)
    Dialog, pripadne vsechny jeho derivaty, inspirace, kopie, napodobeniny apod. (lxdialog, cdialog, Xdialog, Newt/whiptail, Zenity, ...) by mohly byt tvojimi kamarady.

    screenshot a jeste jeden.

    Samozrejme to muzes pokazde udelat tim nejbrutalnejsim zpusobem, jak uz ti tady radili vyse, tedy vypisovat text primo na terminal. Navod je treba tady (dalsi stranka pak dava lehounky uvod do dialogu)

    Musim se take pripojit k te zadosti o mene otazek najednou a hlavne lepe formatovat. Je az z podivem, ze jsem se tim prokouskal. Takhle ti vazne moc lidi neporadi, kdyz to vypada, jako by sem jen tak ledabyle odhodil nejaky nepouceny klikaci uzivatel.

    A abych nezapomnel, tak doporucim cteni Na Internet se samozrejme vali cela rada navodu, jak psat skripty v Bash.
    31.5.2010 00:48 Ant
    Rozbalit Rozbalit vše Cteni souboru
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f1 -d';' ); do idecko[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f1 -d';' ); do idecko[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f2 -d';' ); do jmena[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f3 -d';' ); do delka[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f4 -d';' ); do povodi[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f5 -d';' ); do prutok[$pozice]=$x && pozice=$((pozice + 1)); done
    pozice=1
    
    Oh, my eyes! :-)

    Cteni ze souboru a prirazovani promennym je popsano v jednom z predchozich dotazu.

    Take to pouzivani '&&' je zbytecne. Staci oddelit stredniky nebo jeste lepe psat na novy radek. Zvysovani pozicniho indexu jsem nejak nepochopil. Nemelo by tam byt: pozice=(($pozice + 1)) ?
    31.5.2010 00:55 Ant
    Rozbalit Rozbalit vše Re: Cteni souboru
    Zvysovani pozicniho indexu jsem nejak nepochopil. Nemelo by tam byt: pozice=(($pozice + 1)) ?
    Nebo pochopitelne hezci Bashova verze: ((pozice++)) (viz "man bash", sekce ARITHMETIC EVALUATION)
    31.5.2010 01:54 Ant
    Rozbalit Rozbalit vše Re: Cteni souboru
    pozice=1
    for x in $( cat reky.csv | grep -v "jmeno" | cut -f5 -d';' ); do prutok[$pozice]=$x && pozice=$((pozice + 1)); done
    
    Aby to bylo uplne jasne, tak ta "oskliva" verze by pak vypadala:

    pozice=1
    for reka in $(cat reky.csv | grep -v "jmeno" | cut -f5 -d';' )
    do
       prutok[$((pozice++))]=$reka
    done;
    

    Take by melo jit primo prutok[$(cat reky.csv | grep -v "jmeno" | cut -f5 -d';' )] a pak by to bylo indexovane automaticky od nuly
    31.5.2010 02:02 Ant
    Rozbalit Rozbalit vše Re: Cteni souboru
    Take by melo jit primo prutok[$(cat reky.csv | grep -v "jmeno" | cut -f5 -d';' )]
    Chybicka se vloudila.

    Spravne ma byt: prutok=($(cat reky.csv | grep -v "jmeno" | cut -f5 -d';' ))
    31.5.2010 01:00 Ant
    Rozbalit Rozbalit vše Re: Cteni souboru
    Nemelo by tam byt: pozice=(($pozice + 1)) ?
    Odpovim si sam: nemelo :-)

    Autor to mel spravne: pozice = $((pozice + 1))
    31.5.2010 15:55 Semo | skóre: 45 | blog: Semo
    Rozbalit Rozbalit vše Re: Bash - sort databáze v proměné typu pole
    K triedeniu: potrebujes si precitat "man sort". Ale to ti uz napisali vyssie.

    Vypis retazcov na fixnu dlzku:

    Najjednoduchsi sposob je
    printf %10s string
    printf %-10s string
    Pokial vadi spustanie externeho procesu (je to napr. volane v cykle 100000x), tak cisto v Bashi (ukazane na cislach, pouzivam to v jednom skripte a nechce sa mi to prerabat):
    #!/bin/bash
    
    zeros=0000000000  # 10 nul
    
    num=123
    if [[ ${#num} -lt 10 ]]; then
        len=$((10 - ${#num}))
        num="${zeros:0:$len}$num"
    fi
    echo $num
    
    If you hold a Unix shell up to your ear, you can you hear the C.
    31.5.2010 18:57 Adam Výborný
    Rozbalit Rozbalit vše Re: Bash - sort databáze v proměné typu pole
    Já vim, jak sesortuju jeden sloupecek ale je potrebuju aby se podlo toho seradili i ty dalsi...
    1.6.2010 04:17 zulu
    Rozbalit Rozbalit vše Re: Bash - sort databáze v proměné typu pole
    Nesortujes sloupce, ale radky podle nejakeho sloupce. Presne to ten sort umi.
    m$ lipo $m avatar 1.6.2010 02:42 m$ lipo $m | skóre: 19 | blog: čaj o páté | Redmond
    Rozbalit Rozbalit vše Re: Bash - sort databáze v proměné typu pole
    A je nejaky duvod proc k tomuto pouzit zrovna bash ? Reseni s bashem nebude uplne nejefektivnejsi max v nem udelat to menu. Nebylo by vhodnejsi ten csv soubor exportovat do nejake SQL db a tu pak podrobit tem dotazum co potrebujes samo ze s vypisem do konzole.
    Albuquerque, New Mexico (April 4, 1975)
    1.6.2010 09:19 Adam Výborný
    Rozbalit Rozbalit vše Re: Bash - sort databáze v proměné typu pole
    Důvod je, že je to cvičební zadání od učitele
    1.6.2010 10:23 chochi | skóre: 29 | Praha
    Rozbalit Rozbalit vše Re: Bash - sort databáze v proměné typu pole
    Ahoj,

    Ja bych to resil nejak takhle (funguje i v sh a jeste je potreba dodelat pekne formatovani):
    
    #!/bin/sh
    
    DB="db.csv"
    OFF=10
    
    echo "Available sort orders:"
    I=1
    head -1 $DB | sed "s/;/\n/g" | while read H; do
    	echo "$I.) $H"
    	I=`expr $I + 1`
    done
    MAX=`head -1 $DB | sed "s/[^;]//g" | wc -c`
    SORT=""
    while [ "X" = "X$SORT" ]; do
    	echo
    	printf "Select sort order (use value +$OFF for numeric sort): "
    	read SORT
    	if [ "X" = "X$SORT" ]; then
    		echo "Sort order can not be empty!"
    	else
    		if expr $SORT + 0 1>/dev/null 2>&1; then
    			NUM=""
    			if [ $SORT -gt $OFF ]; then
    				SORT=`expr $SORT - $OFF`
    				NUM="-n"
    			fi
    			if [ $SORT -gt $MAX ]; then
    				echo "Sort order is over maximal ($MAX) allowed value!"
    				SORT=""
    			fi
    		else
    			echo "Value \"$SORT\" is not numeric!"
    			SORT=""
    		fi
    	fi
    done
    echo
    tail -n +2 $DB | sort -k $SORT -t ";" $NUM
    

    Založit nové vlákno • Nahoru

    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.