Haliho! Te aztán nem viccelsz! Még napok múlva is keresem az álkapcsom... Üdv:Tamás Az iPhone készülékemről küldve 2010.09.29. dátummal, 1:40 időpontban "Horváth Gergely J. (Ottó)" <hgj@sch.bme.hu> írta:
Az ilyen kihívásokat imádom, úgyhogy nosza:
Generálni kéne egy jó nagy adag színt: Ha csak 00, 11, 22 ... EE, FF kódot használunk akkor is 16^3 azaz 4096 féle színt kapunk, ebből már elég jól lehet válogatni :) Azt, hogy ilyet hogy generáljunk, nem írom le. Tetszőleges nyelven meg lehet írni rá a programot, de egy bash szkript is megoldja pikk-pakk a dolgot. Na jó, legyen:
for i in 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF; do for j in 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF; do for k in 00 11 22 33 44 55 66 77 88 99 AA BB CC DD EE FF; do echo \#$i$j$k >> szinek done done done
Most van több lehetőségünk is, hogy ezek közül hogy válasszunk, én úgy gondolom, hogy ha a színek többen vannak, mint amennyi kell, akkor keverjük őket össze és menjünk végig a listán - így biztos, hogy egy szín egyszer fordul elő, ráadásul véletlen sorrendben:
shuf szinek -o szinek
Fontos megjegyeznem, hogy a
shuf szinek > szinek
nem fog működni, mert a futás után üres lesz a fájl. Ez azért van, mert a bash-ben irányítjuk át a standard kimenetet a szinek fájlba, ami előtt a bash szépen kitörli a fájl tartalmát. A -o kapcsolóval viszont a programnak mondhatjuk meg, hogy a kimenet mi legyen, ilyenkor nem írja felül a fájlt :)
Kellene nekünk valami olyan, ami kicseréli mondjuk a _SZIN_ szavakat a generált fájlokban. Ez egyszerű:
sed 's/_SZIN_/#00FF00/' file
Viszont nem a #00FF00-ra kellene cserélni, hanem a szinek fájlban lévő X. sorban található hexa kódra. Egy fájl X. sorának kiírására kapásból 3 módszer jut eszembe:
sed -n 'Xp' szinek sed -n 'X{p;q}' szinek --ez gyorsabb, mert az X. sor után kilép
head -X szinek | tail -1 --ez lassu...
gawk 'NR==X' szinek gawk '{if (NR==2) {print $0; nextfile}}' szinek --ez megint gyorsabb
Akkor most feltételezem, hogy már van XX darab html fájlunk egy könyvtárban, amik csak arra várnak, hogy a _SZIN_ részük ki legyen cserélve egy véletlen színre. Menjünk végig rajtuk és alkalmazzuk a fenti sorok valamelyikét is, hogy mindig a következő sorban lévő kód kerüljön oda:
let i=1 for f in *.html; do sed "s/_SZIN_/`sed -n "$i{p;q} szinek"/g" $f let i++ done
Azért persze ez előtt le kell generálni és összekeverni a színeket a szinek fájlba.
Ha nem akarjuk egyedivé tenni őket, akkor lehet mindig véletlenedik sort olvasni, vagy mindig kevergetni a fájlt.
Egy hasznos dolog van még, ha nem akarunk kifutni a színekből, hanem folyamatosan előről kezdeni, ha elfogy a 4096 szín:
let i=1 for f in *.html; do sed "s/_SZIN_/`sed -n "$i{p;q} szinek"/g" $f let 'i = i>4096 ? 1 : i+1' done
Jó éjt :)
On 28/09/10 09:52, NOT INFECTED!from Lakosimi wrote:
Sziasztok!
Megoldást keresek a következő feladatra: Adva van XX db. txt fájl amelyből egy shellscript segítségével HTML fájlokat készítek. Csakhogy az lenne a feladat, hogy a fájlok hátterét ne egyforma színüre készítse. Ez néhány db. fájl esetében nem gond, mert kézzel át lehet írni, ámde 60-80-100 fájlnál azért ez már "húzós". Tehát! Hogyan tudom scriptől azt megoldani, hogy a készülő HTML fájlok más és más hátteret kapjanak?
Pl. #74ECDE #DEF4A6 #F7C7FB #C9FBCA #FBD09C #9DFBF5 #BDBAFB stb. A fentieket lehetne váltogatni, vagy akár az árnyalatokon is változtatni, ha az utóbbi megoldható.
Köszi előre is az 5leteket