Portál AbcLinuxu, 10. května 2025 07:24

Dotaz: Objasnění scriptu v prikazove radce

9.2.2016 17:31 zacatecnik
Objasnění scriptu v prikazove radce
Přečteno: 459×
Odpovědět | Admin
Dobry den, snazim se vytvorit seznam kde by mel kazdy uzivatel vlastni index 0, 1, 2, 3, 4 atd.. a po zadaní toho indexu a nazvu polozky by se vypsalo vse potrebne, ale porad mi to nejak nejde a tak chci pozadat zde zkusenych programatoru o pomoc. Zkousel jsem to takto, hledal jsem na netu ale konkretni reseni jsem nenasel. Dekuji predem za pomoc.
declare -A mylist

mylist=("jmeno" "prijmeni" "adresa")

mylist[0]['jmeno']="petr"
mylist[0]['prijmeni']="sulc"
mylist[0]['adresa']="ostrava 33"

echo ${mylist[0]['jmeno']} # petr
echo ${mylist[0]['prijmeni']} # sulc
echo ${mylist[0]['adresa']} # ostrava 33
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

9.2.2016 17:42 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Objasnění scriptu v prikazove radce
Odpovědět | | Sbalit | Link | Blokovat | Admin
Bash není stavěný na práci s polem - je to jen taková nouzovka. Zato umí velice dobře pracovat se soubory, což s sebou přináší výhody perzistence výsledků.

Určitě existuje elegantní řešení tvého problému, ale pole bych do toho netahal.

O co se vlastně snažíš?
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
9.2.2016 17:51 zacatecnik
Rozbalit Rozbalit vše Re: Objasnění scriptu v prikazove radce
Dobry den, děkuji za odpoved. Snazim se vytvorit seznam uzivatelu bez nejake databaze, ktere bych mohl jednoduse vypsat prave dle toho jejich indexu (id). Chtel bych to pomoci toho pole, jelikoz bych to potreboval ruzne dle potreby seradit, treba podle nejakeho datumu, id, atd. Kdybych mel dejme tomu 10 atributu, jmeno, prijmeni, adresa, datum atd.. musel bych asi vytvorit 10 souboru a co raek to jeden uzivatel, ale to si nedokazu predstavit, jak bych to pak mohl setridit.
9.2.2016 18:11 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Objasnění scriptu v prikazove radce
Tohle se dá řešit například formátem CSV - tedy jeden záznam, jeden řádek. Jeden řádek, 10 sloupců oddělených třeba středníkem. Vyhledávání příkazem grep, řazení příkazem sort, vyřezávání a spojování potřebných sloupců příkazy cut a paste, spojování dvou souborů podle klíčů zase join. Skoro jako práce s databází. Na speciality ještě awk a Perl, se kterými se dá už vyvádět cokoli.

Ještě je jeden zajímavý nástroj: sqlite3, který umí vše, co je uvedeno výše, data má v jednom souboru, je rychlý a dá se s ním pohodlně pracovat z příkazové řádky (volat ze skriptu). Není kvalifikován jako databáze, protože neumí pracovat na síti, ale na takové lokální skripty se hodí jako skvělé a robustní řešení. Kromě toho s tím souborem umí pracovat většina skriptovacích jazyků, Python a Perl nevyjímaje.

A pak tu máme ještě jednu samostatnou, ale velmi zajímavou kapitolu: XML. Umí vše, co požaduješ. Opět je pro takovou práci dostatek nástrojů.

Jak vidíš, vše zmíněné je lepší než Bash. Vše uvedené nabízí nějakou formu trvanlivého uchování dat. Máš na výběr.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
9.2.2016 22:25 zacatecnik
Rozbalit Rozbalit vše Re: Objasnění scriptu v prikazove radce
Moc dekuji za napovedu. Tak jsem hledal nejaké info ohledne toho CSV ale jak seradit cely soubor podle nejakeho sloupce jsem fakt nenasel. Taky jsem nikde nenasel jak nacist jen urcity pocet radku. Nemáte prosím nějaký odkaz jak na to ? Moc dekuji
9.2.2016 22:41 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Objasnění scriptu v prikazove radce
To se dělá tak, že se nejprve příkazem cut přeskládají sloupečky podle priority řazení, pak se zavolá sort a nakonec se to opět přeskládá příkazem cut podle potřeby výstupu.

Je to velmi rychlé a zpravidla se to dá napsat i na jeden řádek. Žádné mezivýsledky není třeba ukládat, jde to přímo z jednoho filtru do druhého.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
9.2.2016 23:50 zacatecnik
Rozbalit Rozbalit vše Re: Objasnění scriptu v prikazove radce
Hned jdu o tom něco pohledat, díky

a můžu omezit ten read na "od" "od" ?
while IFS=';' read -r c1 c2 c3e
do
...      
done < /test.csv
10.2.2016 00:47 Kit | skóre: 45 | Brno
Rozbalit Rozbalit vše Re: Objasnění scriptu v prikazove radce
Tohle jsi vyhrabal kde? Je lepší na takové cykly zapomenout, protože jsou děsně pomalé.

S tímhle si dobře poradí awk.
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
kozzi avatar 9.2.2016 17:53 kozzi | skóre: 55 | blog: vse_o_vsem | Pacman (Bratrušov)
Rozbalit Rozbalit vše Re: Objasnění scriptu v prikazove radce
Odpovědět | | Sbalit | Link | Blokovat | Admin

To v bashi nejspis neni uplne mozne: http://stackoverflow.com/questions/6149679/bash-need-some-help-with-multidimensional-associative-arrays

Linux je jako mušketýři "jeden za všechny, všichni za jednoho"

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.