Hozzászólások
-
SzerzőBejegyzés
-
A sebesség bizony gyanús és az eredmény sem az, aminek lennie kéne.
Hogy ennyi -e a sorok száma, azt awc -l ./adatfajl
paranccsal tudod leellenőrizni.
Javaslom, hogy a split paranccsal vágd kisebb részre az állományt és kisérletezz azon.Közben kipróbáltam 1 GB-os szöveges fájlon (/var/log/messages többször összemásolva), nekem ez jött ki:
real 1m40.049s
user 1m18.632s
sys 0m2.143s3GB-nál pedig ezt kaptam:
real 5m25.756s
user 3m33.773s
sys 0m20.679s
azaz ~3,5 perc alatt végzett a művelettel (a proci közben 90% környékén dolgozott).Azért 3GB-ot végigvolvasni nem 1 pillanat, főleg ha műveletet is végzel rajta.. és ezt még írási művelet is követi. Először anélkul próbáld hogy fájlba írod az eredményt. Ha ez sem működik, akkor a split paranccsal szedd kisebb részekre a fájlt, és azon csináld meg a műveletet.
Ha lehet rendezni, akkor a legegyszerűbb szerintem a
sort -u ./adatfajl
parancs.
Ez rendez és rögtön ki is dobja az azonos sorokat.Szerintem nem volt feltétel, hogy az ismétlődéseknek egymás utáni sorokban kell lenniük. Ekkor pedig nem lesz jo az uniq..
Persze lehetne előtte rendeztetni, csak nem biztos, hogy a felhasználó szeretné, ha az állománya rendezetté válna.A jó öreg
Code:pam_time.somodult (majdnem pont) ilyen esetekre találták ki.
Hozzárendelheted az időkorlátozó funkciót például a loginhoz (aCode:/etc/pam.d/loginfájlban) majd a
Code:/etc/security/time.conffájlban megadhatod a korlátozás idejét. A limitet megadhatod napok szerint is (pl H-P), és óra/perc alakban is.
Így a logint szépen lehet időben korlátozni.(Amit azonban nem tud: figyelmeztetni és menteni kiléptetés előtt, ha eljő az idő).
Nem rossz 😉 és jól átlátható.
Sebességben is egész kellemes. Az egyetlen amit – ha lesz egy kis időm – szeretnék majd megoldani, az a sed és fájlműveletek kihagyása. Hiába no, kell a kihívás 🙂Köszi!
uzsolt wrote:Javaslok egy listát tartani a még benn levő számokról, és abból törölgetni a már „kisorsolt” számokat, és a maximálisan generálható véletlenszám is csökken egyet minden körben. Remélem, érthető az elve 😉Az elv igen, bar érdekelne, hogyan csinálnád a gyakorlatban.
Én tömbökön agyalok – hogy az aktuális fel nem használt listából minden sorsolás után gyártanék egy új tömböt – de nem vagyok biztos benne, hogy gyorsabb lenne.
Azért kíváncsi vagyok, hátha valaki mond még valami okosat.Sziasztok!
A feladat röviden amihez ötleteket várok: véletlenszámok generálása megadott intervallumon belül úgy, hogy két egyforma szám ne keletkezzen és az összes elemet használjuk fel. A dolog triviálisnak látszik (hasonló a lotto számok problémájához), de egy fokkal mégis nehezebb.
Az általam használt megoldással, ha mondjuk 1-90 között generálok véletlenszámokat, akkor átlagban 81 számig nincs semmi probléma (bár egyre lassabban születnek meg az új számok). Ez után borzalmasan lelassul a szkript.. igazából 84-ig már nem jutottam el, pedig vártam 1-2 percet.
És akkor még nem is próbáltam mondjuk 1-500 (vagy még nagyobb) számokból listát előállítani.Íme az eddigi kód:
Code:for b in $(seq 1 90)
do
while echo ${a:=0} | grep -q ${rand:=0}
do
let rand=”$RANDOM % (90 – 1 + 1) + 1″
done
echo „$b. szam $rand”
a=”$a $rand”
doneTehát a kérdés, hogyan lehet egyszerűen, de hatékonyan megoldani bash szkripttel a fenti problémát?
Közben rájöttem a megoldásra:
Code:bill=”.”
echo -n „Tovább (I/N/Enter) ”
until [ „$bill” = „N” -o „$bill” = „I” -o „$bill” = „” ]
do
read -sn 1 bill
donecase $bill in
I) echo Igen ;;
N) echo Nem ;;
*) echo Enter ;;
esacSziasztok!
Egy Bash szkript részeként szeretnék a felhasználótól megerősítést kapni, hogy folytatja -e az adatbevitelt.
Egyetlen billentyű leütést szeretnék feldolgozni, ami lehet I, N (a kis nagybetuket nem kell figyelni) vagy Enter.
Fontos, hogy a többi billentyűre ne reagáljon és hogy ha Enter-t üt a felhasználó, akkor az ugyanazt csinálja,
mintha „I”-t nyomott volna (default „I”).
A probléma az Enter figyelésében rejlik.Eddig ez van meg, ezt kéne kiegészíteni az Enter figyelésével is, csak nem tudom hogyan?
Code:echo -n „Tovább (I/N/Enter) „; read -n 1 bill
until [ „$bill” = „N” -o „$bill” = „I” ]
do
FELDOLOGOZÓ RÉSZ
done -
SzerzőBejegyzés
legutóbbi hsz