Goosfrabaa

Hozzászólások

10 bejegyzés megtekintése - 41-50 / 143
  • Szerző
    Bejegyzés
  • Hozzászólás: ismetlodo sorok torlese #2199671
    Goosfrabaa
    Felhasználó

      A sebesség bizony gyanús és az eredmény sem az, aminek lennie kéne.
      Hogy ennyi -e a sorok száma, azt a wc -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.143s

      3GB-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).

      Hozzászólás: ismetlodo sorok torlese #2199669
      Goosfrabaa
      Felhasználó

        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.

        Hozzászólás: ismetlodo sorok torlese #2199666
        Goosfrabaa
        Felhasználó

          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.

          Hozzászólás: ismetlodo sorok torlese #2199660
          Goosfrabaa
          Felhasználó

            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.

            Goosfrabaa
            Felhasználó

              A jó öreg

              Code:
              pam_time.so

              modult (majdnem pont) ilyen esetekre találták ki.
              Hozzárendelheted az időkorlátozó funkciót például a loginhoz (a

              Code:
              /etc/pam.d/login

              fájlban) majd a

              Code:
              /etc/security/time.conf

              fá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ő).

              Hozzászólás: Bash script #2053613
              Goosfrabaa
              Felhasználó

                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!

                Hozzászólás: Bash script #2053610
                Goosfrabaa
                Felhasználó
                  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.

                  Hozzászólás: Bash script #2053608
                  Goosfrabaa
                  Felhasználó

                    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”
                    done

                    Tehát a kérdés, hogyan lehet egyszerűen, de hatékonyan megoldani bash szkripttel a fenti problémát?

                    Hozzászólás: Bash script #2053607
                    Goosfrabaa
                    Felhasználó

                      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
                              done

                      case $bill in
                          I) echo Igen ;;
                          N) echo Nem ;;
                          *) echo Enter ;;
                      esac

                      Hozzászólás: Bash script #2053605
                      Goosfrabaa
                      Felhasználó

                        Sziasztok!

                        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
                      10 bejegyzés megtekintése - 41-50 / 143