Bash script

Kezdőlap Fórumok Programozás Bash script

10 bejegyzés megtekintése - 111-120 / 438
  • Szerző
    Bejegyzés
  • #2053289
    MyCroft
    Felhasználó
      budacsika wrote:
      Szia!
      Nem túl legáns, de működik. (nálam bizos)
      ls -l | cut -d ” ” -f 1,4,5,6,7,8

      Ez csak spec. esetben működik. (Pl. ha egy filera próbálod meg)
      Ugyanis ha több file van, akkor a méret oszlop szélességét az ls -l a „legnyagyobb”-hoz állítja be. Pl:

      Code:
      -rwxrwx— 1 mycroft mycroft 168915 2006-05-10 19:42 cincogo.jpg
      -rw-r–r– 1 mycroft mycroft      0 2006-10-20 08:40 lista.txt

      Látható, hogy a csoport és a méret között lehet több space is (sőt általában több van), így elég érdekes lista lesz a végeredmény, hiszen a cut az üres mezőket is mezőnek tekinti.
      És akkor még bejöhet olyasmi, hogy lehet olyan rendszer, ami a dátumot nem – jellel hanem space-szel választja el, vagy esetleg olyan filenevek, amik tartalmaznak space-t is.
      Ha már ilyen irányban nézelődünk, akkor awk jöhet még szóba, de az már ágyúval verébre kategória 🙂

      #2053290
      retaliator44
      Felhasználó

        Phű, az első kérdés ok, azt felfogtam. A második: nem annak a sednek kell a kimenetet generálni, csak valamit odaírtam amiben van ‘, de ezt észre is vetted.
        Sőt most látom csak, hogy a második is jó, csak a „hülye példában” az echo keze picit meg van kötve karakterügyileg, ha nem védjük le manuálisan. De ha írok egy scriptet ami kifejezetten ilyen eszement karaktereket generál, akkor az első megoldás működik.
        Köszönöm szépen.

        #2053291
        retaliator44
        Felhasználó

          Egyébként az a sed-es sor az eredeti feladat megoldása. Van valami elegánsabb megoldás esetleg? A feladat konkrétan: az ls -l második oszlopa kell (a számos), meg a dátumoszlopok.
          Az eddigi megoldás még egyszer:
          ls -l |sed ‘s/.{10} *([0-9]+).* [0-9]+ (.*) .*/1 2/’

          #2053292
          MyCroft
          Felhasználó
            retaliator44 wrote:
            Egyébként az a sed-es sor az eredeti feladat megoldása. Van valami elegánsabb megoldás esetleg? A feladat konkrétan: az ls -l második oszlopa kell (a számos), meg a dátumoszlopok.
            Az eddigi megoldás még egyszer:
            ls -l |sed ‘s/.{10} *([0-9]+).* [0-9]+ (.*) .*/1 2/’

            Azért vigyázz, mert symlinkeknél gondod lehet:
            lrwxrwxrwx 1 mycroft mycroft    21 2006-10-11 21:29 homepages -> /media/sda8/Homepages
            Egy ilyen sorra ez lesz az eredmény:
            1 2006-10-11 21:29 homepages ->

            (Természetesen az összes space-t tartalamzó filenévnél ugyanez előjön)

            Ha már emlegettem az awk-t, akkor egy lehetőség:
            ls -l | awk ‘{ print $2,$6 }’

            #2053293
            retaliator44
            Felhasználó

              Értem. És awk nélkül? (asszem ZH-kban nem nagyon szeretik az awk-t, csak azért, nem kötözködni akarok)

              #2053294
              MyCroft
              Felhasználó

                Amennyiben ELTE Progmat/Proginfo és progkör tárgy, akkor valóban nem szeretjük zh-ban az AWK-t, illetve van egy szabály, hogy max mennyi pontot lehet awk-s megoldással szerezni.
                Amúgy természetesen azzal a sed-del is meg lehet csinálni, csak a 2. csoportot jobban kell definiálni. Mivel dátumról van szó, ez nem jelenthet gondod.

                #2053295
                retaliator44
                Felhasználó

                  Igen, progkör… egyébként pont ez a baj hogy a dátumnál mi van. Mert eddig ahány rendszer annyiféle dátum. Van ahol 2006-10-24 van ahol Oct 24 2006 és így tovább. Pláne ha az időt is neadjisten 10:00PM-nek írja akkor aztán káosz.

                  #2053296
                  retaliator44
                  Felhasználó

                    (Tök más) Tudom hülye kérdés, de hogy kell szűrőt csinálni? Olyat ami fileból olvas vagy ha nem kap filet akkor standard inputról?

                    #2053297
                    MyCroft
                    Felhasználó
                      retaliator44 wrote:
                      (Tök más) Tudom hülye kérdés, de hogy kell szűrőt csinálni? Olyat ami fileból olvas vagy ha nem kap filet akkor standard inputról?

                      Erre találsz egy általánosan alkalmazható példát itt:
                      http://people.inf.elte.hu/spala/unix_gyak/peldak/pelda1ISO
                      (esetleg http://people.inf.elte.hu/spala/unix_gyak/peldak/pelda1UTF – karakterkódolás csak a különbség)
                      Lehet máshogy is, ez egy lehetőség.

                      #2053298
                      MyCroft
                      Felhasználó
                        retaliator44 wrote:
                        Igen, progkör… egyébként pont ez a baj hogy a dátumnál mi van. Mert eddig ahány rendszer annyiféle dátum. Van ahol 2006-10-24 van ahol Oct 24 2006 és így tovább. Pláne ha az időt is neadjisten 10:00PM-nek írja akkor aztán káosz.

                        Igen, a pandorán 2006-10-24 a forma, sztem azt vedd viszonyítási alapnak.
                        Más kérdés, hogy ha ez beadandóban lenne, akkor gáz van, mert a fi-n már más formátum van :S

                      10 bejegyzés megtekintése - 111-120 / 438
                      • Be kell jelentkezni a hozzászóláshoz.