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 23:45 | Zajímavý software

Na blogu Qt bylo představeno Qt 3D Studio. Jedná se o produkt dosud známý pod názvem NVIDIA DRIVE™ Design Studio. NVIDIA jej věnovala Qt. Jedná se o několik set tisíc řádků zdrojového kódu. Qt 3D Studio bude stejně jako Qt k dispozici jak pod open source, tak pod komerční licencí. Ukázka práce s Qt 3D Studiem na YouTube.

Ladislav Hagara | Komentářů: 3
včera 17:50 | Komunita

Nadace The Document Foundation (TDF) zastřešující vývoj svobodného kancelářského balíku LibreOffice slaví 5 let od svého oficiálního vzniku. Nadace byla představena 28. září 2010. Formálně byla založena ale až 17. února 2012.

Ladislav Hagara | Komentářů: 0
včera 12:50 | Komunita

Mozilla.cz informuje, že dosud experimentální funkce Page Shot z programu Firefox Test Pilot (zprávička) se stane součástí Firefoxu. Page Shot je nástroj pro vytváření snímků webových stránek. Umí výběr oblasti, prvku stránky (např. odstavce), nebo uložení snímku celé stránky. Snímky lze ukládat na disk nebo nahrávat na server Mozilly. Nedávno bylo oznámeno, že se součástí Firefoxu stane Activity Stream.

Ladislav Hagara | Komentářů: 23
včera 04:10 | Nová verze

Po 10 týdnech vývoje od vydání Linuxu 4.9 (zprávička) oznámil Linus Torvalds, mj. již 20 let žijící v USA, vydání Linuxu 4.10 (LKML). Přehled nových vlastností a vylepšení například na Kernel Newbies a v Jaderných novinách (1, 2 a 3). Kódové jméno Linuxu 4.10 je Fearless Coyote.

Ladislav Hagara | Komentářů: 8
19.2. 15:55 | Zajímavý projekt

Vyzkoušet si příkazy a vyřešit několik úkolů lze na stránkách Commandline Challenge (CMD Challenge). Úkoly lze řešit různými způsoby, důležitý je výsledek. Zdrojové kódy jsou k dispozici na GitHubu pod licencí MIT.

Ladislav Hagara | Komentářů: 18
18.2. 17:35 | Bezpečnostní upozornění

Německá Bundesnetzagentur (obdoba českého ČTU) zakázala na německém území prodej panenky Cayla kvůli „špionáži“ dětí. Tato elektronická hračka obsahuje mikrofon, reproduktor a kameru a bezdrátové komunikační rozhraní, pomocí kterého se hračka připojuje na servery výrobce. Takovýmto způsobem může hračka pomocí umělé inteligence „odpovídat“ na dotazy dítěte. Hlavní problém bude ale asi někde jinde, podle prvotních zpráv může

… více »
Petr Tomášek | Komentářů: 32
17.2. 15:30 | Bezpečnostní upozornění

CSIRT.CZ upozorňuje, že bezpečnostní experti objevili nový typ malwaru, jenž cílí na open source e-commerce platformu Magento. Malware je zajímavý tím, že se jedná o první svého druhu, jehož kód zůstává skrytý v SQL databázi zasaženého e-shopu. Škodlivý kód je volán pomocí tzv. SQL trigerru, který je spouštěn při každém vytvoření objednávky v systému.

Ladislav Hagara | Komentářů: 3
17.2. 09:00 | Nová verze

Bylo vydáno Ubuntu 16.04.2 LTS, tj. druhé opravné vydání Ubuntu 16.04 LTS s kódovým názvem Xenial Xerus. Přehled novinek v poznámkách k vydání a v přehledu změn.

Ladislav Hagara | Komentářů: 60
17.2. 06:00 | Zajímavý článek

Pavel Tišnovský se v dvoudílném článku na MojeFedora.cz věnuje tvorbě pluginů (modulů) pro bitmapový grafický editor GIMP. Pomocí pluginů lze GIMP rozšiřovat o další funkce. Implementovat lze například nové filtry nebo pomocné utility pro tvorbu animací či poloautomatickou retuš snímků.

Ladislav Hagara | Komentářů: 6
16.2. 23:32 | Komunita

Do 30. března se lze přihlásit do dalšího kola programu Outreachy, jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 30. května do 30. srpna 2017, v participujících organizacích lze vydělat 5 500 USD. Jedná se již o 14. kolo tohoto programu.

Ladislav Hagara | Komentářů: 11
Jak se stavíte k trendu ztenčování přenosných zařízení (smartphony, notebooky)?
 (13%)
 (2%)
 (72%)
 (3%)
 (10%)
Celkem 671 hlasů
 Komentářů: 61, poslední dnes 13:06
Rozcestník
Reklama

Dotaz: Jak mam predavat promennou v prubehu scriptu?

16.5.2006 10:40 milis
Jak mam predavat promennou v prubehu scriptu?
Přečteno: 230×
Mam textovy soubor Input, obsahujici napr.: 54231.blabla

a potrebuju cas od casu otestovat, zda existuje soubor ktery bude koncit prave tim cislem, napr.: script.o54231

Pro nacteni toho cisla pouzivam: awk -F . '{ $ NUM = $1 }' Input

pro test existence pouzivam: if [ ! -e *.o$NUM ] then echo ".o$NUM does not exist."; fi Prikazy samy o sobe funguji, ale nedari se mi predavat to cislo NUM. Asi to bude jen malickost, ale fakt na ni nemuzu prijit.

Odpovědi

16.5.2006 10:58 mike
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
ja bych to udelal takto:
for num in $(cat file | sed -e 's/\..*//g')
    do 
    if [ ! -e \*.o$num ]
    then 
       echo "o$num does not exist"
    fi 
done
16.5.2006 11:13 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Hm, dobrej nápad. Hlavně pro scripty obsahujcí milióny řádek. Jen ať se nám ten shell pořádně zapotí.
while read line
do
  num="${line%%.*}"
  if [ ! -e \*.o$num ]
  then 
    echo "o$num does not exist"
  fi
done < file
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
16.5.2006 11:22 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Ech. To je tak, když opíšu něčí chybovej kód.
while read line
do
  num="${line%%.*}"
  files=*.o"$num"
  if [ "$files" == "*.o$num" ]
  then 
    echo "*.o$num does not exist"
  fi
done < file
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
16.5.2006 12:22 mike
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Hm dobrej napad. Hlavne pro shelly, ktere maji jina pravidla pro expanzi.

jinak

cat /usr/share/man/man1/test.1.gz | gunzip | grep "==" | wc
      0       0       0
16.5.2006 13:04 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
hmm, tak to máš blbé, já používám shelly, které mají test jako interní příkaz a == kupodivu rozumí. No a expanze v shellu, který používám já, se kupodivu dá řídit pomocí takových věcí jako nocaseglob, nullglob, failglob a dotglob. To je mi tě dost líto jestli jsi nucen používat shell ve kterém si to nemůžeš nastavit. Upřímnou soustrast.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
16.5.2006 13:17 mike
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Nemam to blbe, pouzivam shell, ktery mi vyhovuje s nastavenim, ktere mi taky vyhovuje, a pracuje se mi s nim dobre. Skript, ktery jsem tu napsal, byl pouze ilustracni. Nikoho jsem nenutil, aby to pouzil presne tak, jak to tam je (proto ten podminovaci zpusob). V dalsim prispevku jsem jenom reagoval na tvoji aroganci.
16.5.2006 13:53 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Kostrukce for num in $(cosik z nějakého souboru) Je blbě ať už to budete okecávat třeba týden.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
16.5.2006 16:39 mike
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
A z ceho tak usuzujes? Souhlasim, ze cist soubor po radku muze byt optimalni reseni v nekterych pripadech, v jinych zase nikoliv. Zkus si spocitat kolikrat se zavola read() pri mem a tvem reseni. A kdyz nektere veci nevis, tak radsi pomlc a nedelej ze sebe moc chytryho.
16.5.2006 16:51 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Mám na jazyku něco peprného, ale na někoho kdo píše cat file | sed nebudu plýtvat silami :-)
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
16.5.2006 22:02 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
to pisem aj ja, nevidim na tom nic zle :-) zo sirsieho pohladu je pouzivanie cat snad aj vyhodnejsie
16.5.2006 22:12 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Na 'cat file | sed' není absolutně nic špatného, to jen pár exhibicionistů má vždycky druhé vánoce, když mají příležitost na někoho dělat ramena, že je úplný blbec, pokud něco takového napíše. Osobně to používám celkem běžně, protože když před ten sed pak chci předřadit další filtr, je to podstatně jednodušší a to je pro mne při interaktivní práci podstatnější než mít orgasmus z jednoho ušetřeného catu…
17.5.2006 09:40 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
To že mister Kubeček neví co je na tom špatného neznamená, že na tom nic špatného není. Proč úplně zbytečně spouštět dva procesy, které se budou skrz rouru navzájem blokovat, když můžu úplně normálně spustit jeden proces. To je dost dobrý důvod to nedělat. A jestli se vám zdá zápis <file sed méně čitelný, tak by jste si měl něco udělat s očima. Já do toho dokážu vložit filtr <file filter | sed úplně stejně snadno jako cat file | filter | sed do cat file | sed. Dokonce je to naprosto stejný počet znaků a do prakticky stejného místa.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
17.5.2006 10:30 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
priklad: volitelny filter
in_filter="cat"
in_filter="gunzip"
in_filter="bunzip"

< $in_file $in_filter | sed ...
17.5.2006 10:31 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
"Mister Vychodil" by si měl už konečně uvědomit, že většinou se dá problém stejně dobře řešit více způsoby. A že ne každý musí jeho Jedině Správné Řešení považovat za jedině možné a že ho dokonce někteří ani nemusejí považovat za nejlepší. Třeba že když on považuje zápis '<file sed' za krásně přehledný, nemusí ho proto za krásně přehledný považovat i zbytek světa. A že tedy není pravdou jeho fixní idea, že každý, kdo se na milimetr odchýlí od jeho Jedině Správného Řešení, je automaticky blbec, který tomu vůbec nerozumí.

Věřte nebo ne, při interaktivní práci je mi těch pár mikrosekund (i kdyby to byly milisekundy) navíc na "zbytečný" cat, který vám tak strašně leží v žaludku, naprosto ukradených. O několik řádů delší dobu bych totiž strávil tím, že bych upravoval verzi, kterou vy považujete za jedině správnou. Konstrukce '<file sed' pro mne přehledná není; pokud pro vás ano, klidně si ji používejte, nikdo vám v tom nebrání; vy nám ji, prosím, na oplátku nevnucujte jako jedině správný způsob. Až to budu potřebovat provést milionkrát ve smyčce, budu mít samozřejmě jiné priority - ale pak na to téměř jistě nepoužiju shellový skript.

17.5.2006 12:00 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
to mate pravdu, od cloveka, ktory ovlada perl (a treba povedat, ze dobre), je to zvlastne :-)
16.5.2006 22:05 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
aky je rozdiel medzi nacitanim celeho suboru do pamate oproti jeho postupnemu spracovavaniu po riadkoch? par kilo v pohode, par (desiatok) mega, to uz smrdi.
17.5.2006 08:23 mike
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
rozdil je veliky pokud pouzivas systemove sluzby. Ovsem v nasem pripade i kdyz vypada, ze se nacte celej soubor do pameti, tak to neni. Vytvori se pipe, z jedne strany do ni cat cpe data v urcitych blocich (max jedna stranka) a sed si z pipy vycita taky v urcitych blocich.

"Cteni po radcich" ma nevyhodu, ze se precte blok dat, zjisti se konec radku, zavola se lseek() na konec radku a znova se precte blok dat (dalsi radek), pokud radky jsou male, zavola se read() daleko vicekrat nez v predchozim pripade.

17.5.2006 10:08 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
rozdil je veliky pokud pouzivas systemove sluzby. Ovsem v nasem pripade i kdyz vypada, ze se nacte celej soubor do pameti, tak to neni. Vytvori se pipe, z jedne strany do ni cat cpe data v urcitych blocich (max jedna stranka) a sed si z pipy vycita taky v urcitych blocich.
No a do tohodle místa je to stejné a pak se s tím děje co? Shell se to pokusí rozpársovat do příkazového řádku. Takže se mu to tam vůbec nemusí vejít a to je hned. No a pak tam máme to pársování. V tomhle případě to nevadí, protože v těch číslech mezera není, ale radši se tomu vyhnu, když můžu. Je fakt, že trojková verze bashe už má příkazovou řádku asi neomezenou (teda aspoň v konstrukci for in se to tak jeví a do zdrojáku se mi koukat nechce). Nicméně se to do paměti natáhne celé a bash to zpracovává dost blbě.
"Cteni po radcich" ma nevyhodu, ze se precte blok dat, zjisti se konec radku, zavola se lseek() na konec radku a znova se precte blok dat (dalsi radek), pokud radky jsou male, zavola se read() daleko vicekrat nez v predchozim pripade.
A sed čte taky po řádcích, ne? Takže v čem je rozdíl? Víc procesů, čekání navzájem na sebe ... O čem se tady vlastně bavím, když ten váš script prostě narozdíl od mého nefunguje :-)
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
17.5.2006 10:34 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Píšeš, že
"Cteni po radcich" ma nevyhodu, ze se precte blok dat, zjisti se konec radku, zavola se lseek() na konec radku a znova se precte blok dat (dalsi radek), pokud radky jsou male, zavola se read() daleko vicekrat nez v predchozim pripade.
Mohu vědět, kde se používá tahle implementace? Schválně jsem to zkusil v Pythonu:
for line in file('soubor'):
  pass
Přičemž načítaný soubor má 500 řadků. A dle výpisu strace se řádky čtou takto:
open("soubor", O_RDONLY|O_LARGEFILE)    = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=1000, ...}) = 0
fstat64(3, {st_mode=S_IFREG|0644, st_size=1000, ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7c82000
read(3, "a\na\na\na\na\na\na\na\na\na\na\na\na\na\na\na\n"..., 8192) = 1000
read(3, "", 4096)                       = 0
read(3, "", 8192)                       = 0
close(3)                                = 0
munmap(0xb7c82000, 4096)                = 0
Soubor se čte po velkých blocích a nikde není žádný lseek(). Volání read() se vyskytuje pouze třikrát. Soubor se vejde do jednoho bufferu, takže by to asi stačilo jen jednou, ale rozhodně to není pětsetkrát.
17.5.2006 10:46 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Nepoužívá se nejspíš skoro nikde. Pokud je programátor aspoň trochu při smyslech, tak nezahodí data, která už jednou načetl, ale bude číst z toho bufferu a teprve když se dostane na jeho konec, načte další blok. Většina programů navíc používá streamové funkce buď ze standardní céčkové knihovny nebo ze standardní C++ knihovny, a ty mají své vlastní bufferování, takže i kdyby program chtěl číst vstup po jednotlivých znacích, bude se read() volat na rozumně velké bloky.
17.5.2006 12:12 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
No tady bych trošku přibrzdil. Vzhledem k tomu, že v té smyčce používám read a byť je to vniřní funkce bashe, tak se tam bohužel odělá pokaždé read(), lseek(). On nemůže čuchat jestli nějaký příkaz uvnitř té smyčky náhodou STDIN nečte taky. Takže musí nastavit fpos na korektní hodnotu. Bohužel je to tak. Normální program se tak nechová. V tomhle případě shell ani nemůže být normální program.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
17.5.2006 12:39 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
No jo, pravda, co se dá dělat. Holt když jde člověku o efektivitu, nemá používat shell… :-)
17.5.2006 12:36 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Asi tak:
$ echo -e 'uwehfuh\nihiuh\nhiuh' | while read i; do cat; done
ihiuh
hiuh
$ echo -e 'uwehfuh\nihiuh\nhiuh' | perl -ne 'system("cat")'
$ 
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
Jakub Hájek avatar 16.5.2006 11:13 Jakub Hájek | skóre: 14 | blog: zamek | Praha
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Jaky je duvod escapovat tu hvezdicku v testu? ja bych ji nechal normalne expandovat na jmena souboru. Ale treba se mylim. A cutovat sedem mi prijde take trochu neobratne.
Teprve tehdy, až nebudeme mít co ztratit, budeme opravdu svobodní.
16.5.2006 12:27 mike
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Pokud nechas expandovat hvezdicku na jmena souboru a zadny takovy tam nemas, tak ti shell nahlasi chybu. Blbe je to, kdyz mas i else vetev u if, ktera se taktez nevykona, protoze se nepovedlo vyhodnotit podminku.

sed pouzivam proto, ze je univerzalnejsi nez cut a jsem zvykly ho pouzivat :)

16.5.2006 12:41 mike
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
ad: expanze hvezdicky

teda v zavislosti, na shellu, ktery pouzivas :)

Jakub Hájek avatar 16.5.2006 11:08 Jakub Hájek | skóre: 14 | blog: zamek | Praha
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Problem je v tom, ze shell vubec nema poneti o promennych awku. Pokud trvas na tom awku zkus to takto.
NUM=`awk -F . '{ $NUM = $1; print $NUM; }' Input`
potom uz ten test bude znat promennou $NUM jako promennou shellu.

Ale asi bych se na ten awk vyprdnul a napsal to cele v shellu.
NUM=`cut -d. -f1 Input`
if [ ! -e *.o$NUM ]
then
echo ".o$NUM does not exist."
fi
Teprve tehdy, až nebudeme mít co ztratit, budeme opravdu svobodní.
16.5.2006 11:21 milis
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Diky za radu. Muj vstupni soubor je malicky, takze bych mohl pouzivat obe varianty - funguji ale obe.
16.5.2006 11:25 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Hmm, a když tam bude těch *.o$NUM souborů víc tak se bude moct pokochat hezkou chybovou hláškou.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
Jakub Hájek avatar 16.5.2006 11:47 Jakub Hájek | skóre: 14 | blog: zamek | Praha
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Nojo, co se da delat, musim Vam dat zapravdu..
Teprve tehdy, až nebudeme mít co ztratit, budeme opravdu svobodní.
16.5.2006 12:28 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Přispěju svou troškou do mlýna:
#!/usr/bin/env python
import os, re

regexp = re.compile(r'(\d+)$')
files = {}
for f in os.listdir('.'):
  try:
    num = regexp.search(f).groups()[0]
    try:
      files[num].append(f)
    except KeyError:
      files[num] = [f]
  except AttributeError:
    pass

fr = open('Input')
for line in fr:
  num, ext = os.path.splitext(line)
  try:
    print 'Soubory koncici na %s:' %num
    for f in files[num]:
      print " ", f
  except KeyError:
    print 'Zadne nebyly nalezeny'
Udělal jsem to trochu složitěji, jelikož jsem se chtěl vyhnout tomu, aby se obsah adresáře pokaždé znovu načítal. A taky když už to najde nějaké soubory končící na dané číslo, tak to vypíše jejich seznam.
16.5.2006 13:51 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Heh, to je sila ten python ;-)
perl -ne '/^(\d+)\./&&@{[<*.o$1>]}&&print"*.o$1 found\n"' Input
A když si budu hrát na ukecance:
perl -e '/\.o(\d+)$/&&push@{$h{$1}},$_ foreach<*>;$"=", ";/^(\d+)\./and$h{$1}&&print("$1: @{$h{$1}}\n")||print"$1: *.o$1 nenealezeny\n"while<>' Input
P.S.: Ale jistě, jde to napsat i čitelně, ale to není taková sranda :-)
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
17.5.2006 10:39 Jan Martinek | skóre: 43 | blog: johny | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Snažil jsem se pochopit jak to děláš, ale bezvýsledně. Asi je to jinej Perl než ten, ve kterým jsem kdysi psával ;-)

Zatnul jsem zuby a spustil to. Doufám, že jsi mezi znaky nenaprogramoval backdoor.
17.5.2006 11:58 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
perl -ne '/^(\d+)\./&&@{[<*.o$1>]}&&print"*.o$1 found\n"' Input
prepis na citatelnejsiu formu:

while (<>) {
  /^(\d+)\./
    && @{ [<*.o$1>] }
    && print "*.o$1 found\n";
}
jedina menej bezna finta je pouzitie vlastnosti <>
17.5.2006 12:05 Hynek (Pichi) Vychodil | skóre: 43 | blog: Pichi | Brno
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Jen trochu postfixového foreach a while a pak taky lazy evaluation logické podmínky. V tom druhém případě jsem si ještě navíc pohrál s rozdílem priorit mezi and/or a &&/|| abych si ušetřil závorky a bylo to trochu víc nečitelné a pak je tam ještě takový trik s $" abych nemusel dělaj join. V tom prvním případě jsem musel ještě trošku znásilnit glob, abych ho měl v array contextu a pak ho hned zase dostal do scalar - počet výskytů. V čitelné podobě:
while (my $line = <>) {
  my ($num) = ($line =~ m/^(\d+)\./);
  if (defined $num) {
    my @files = glob("*.o$num");
    if (@files) {
      print "*.o$num found\n";
    }
  }
}
A to druhé
my %files;
foreach my $file (glob("*")) {
  my ($num) = ($file =~ m/\.o(\d+)$/);
  if (defined $num) {
    if (not exists $files{$num}) {
      $files{$num} = [];
    }
    my $filesArrayRef = $files{$num};
    push @$filesArrayRef, $file;
  }
}
while (my $line = <>) {
  my ($num) = ($line =~ m/^(\d+)\./);
  if (defined $num) {
    if (ref $files{$num} eq 'ARRAY') {
      print "$num: ", join(', ', @{$files{$num}}), "\n";
    } else {
      print "$num: *.o$num nenealezeny\n";
    }
  }
}
No a pak stačí vědět, že je nějaké defaul proměnná, glob jde zapsat pomocí < a >, použít lazy evaluation, foreach a while jako postfix a v neposlední řadě, že použití neexistujícího klíče jako reference na pole nebo hash to pole nebo hash založí a celé se to krásně zjednoduší.
XML je zbytečný, pomalý, nešikovný balast, znovu vynalézané kolo a ještě ke všemu šišaté, těžké a kýčovitě pomalované.
16.5.2006 12:45 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Dalsi sposob (nie az tak advanced ako prechadzajuce) :-)
cat Input \
| sed -e 's/\([0-9]*\).*/ls *.o\1 >\/dev\/null 2>&1 || echo ".o\1 does not exists."/' \
| sh
16.5.2006 13:17 happy barney | skóre: 34 | blog: dont_worry_be_happy
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
a pre pripad shellu, ktory inak expanduje ...
cat Input \
| sed -e 's/\([0-9]*\).*/ls -d *.o\1 2>\/dev\/null | fgrep \1 || echo ".o\1 does not exists."/' \
| sh
17.5.2006 14:12 rich
Rozbalit Rozbalit vše Re: Jak mam predavat promennou v prubehu scriptu?
Pokud chces pouzivat stavajici konstrukci tak pred awk by se mel provest export export NUM. No a v prebehu zpracovani tim awk se k te promenne pristupuje takto environ["NUM"]

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.