Brauche Shell script Hilfe - Dateinamen auslesen und sequenzen im string speichern

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von treki, 01.06.2007.

  1. treki

    treki Grünschnabel

    Dabei seit:
    26.05.2007
    Beiträge:
    9
    Zustimmungen:
    0
    Hallo Liebe Shell Experten!
    Ich sitze vor einer Aufgabe die ich alleine leider nicht lösen kann (so weit bin ich noch nicht mit shell) :(

    Ich möchte ein Shell script erstellen, das in einen bestimmten Ordner die filenamen prüft und mir einen string mit den sequenzen (von-bis) erstellt.
    ;) Ist schwer zu erklären, daher versuche ich es so:

    Ich habe einen Ordner in den mehrere dpx (Bilddateie) liegen z.B.:
    333.0000005.dpx
    333.0000006.dpx
    333.0005002.dpx
    333.0005003.dpx
    333.1112201.dpx
    333.1112202.dpx
    333.1112203.dpx

    jetzt möchte ich, das das shell script diesen Ordner (z.B.333) durchsucht und mir am ende folgenden String ausgibt:
    0000005-0000006,0005002-0005003,1112201-1112203

    also immer "von-bis","von-bis",...

    habt Ihr vielleicht eine Lösung für mich?
    Ich wäre euch unendlich dankbar, da dies meinen Arbeitsaufwand unglaublich verringern würde.


    Schönen Gruß
    Mike
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 smg, 01.06.2007
    Zuletzt bearbeitet: 01.06.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    cd $ordner;
    #1: sed -n '2,${s/^.*333.//;p}' <(ls -l) | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s ", $(x), $(x+1); } printf "\n"} '

    #2: sed -n '2,${s/^.*333.//;p}' <(ls -l) | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s, ", $(x), $(x+1); } printf "\n"} ' | sed 's/,\s$//'

    Nicht elegant aber das geht.
    Kannste dann einfach in ne Schleife packen um über mehrer Folder zu iterieren.
     
  4. treki

    treki Grünschnabel

    Dabei seit:
    26.05.2007
    Beiträge:
    9
    Zustimmungen:
    0
    Hi smg
    habe deinen tip ausprobiert jedoch spcukt mir die shell immer folgenden fehler aus:

    line 2: syntax error near unexpected token `('
    line 2: `sed -n '2,${s/^.*101.//;p}' <(ls -l) | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s ", $(x), $(x+1); } printf "\n"} ''

    Mein script sieht so aus:

    cd /101/source/101/;

    sed -n '2,${s/^.*101.//;p}' <(ls -l) | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s ", $(x), $(x+1); } printf "\n"} '

    sed -n '2,${s/^.*101.//;p}' <(ls -l) | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s, ", $(x), $(x+1); } printf "\n"} ' | sed 's/,\s$//'

    kann es daran liegen das ich unter OSX arbeite?
     
  5. #4 z-shell, 02.06.2007
    z-shell

    z-shell Debianator

    Dabei seit:
    30.05.2007
    Beiträge:
    434
    Zustimmungen:
    0
    Ort:
    /home/z-shell
    Code:
    for (x=1; x<NF; x=x+2)
    Ich würd sagen, da fehlt ne Klammer:
    Code:
    for ((x=1; x<NF; x=x+2))
     
  6. #5 Wolfgang, 02.06.2007
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo

    Code:
    sed -n '2,${s/^.*101.//;p}' <(ls -l) 
    Geht nicht!
    Code:
    ls -l|sed ....
    
    Gruß Wolfgang
     
  7. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/

    Bei mir geht beides! Keine Ahnung warum bei euch nicht.

    Deshalb probiere das hier:
    ls -l | sed -n '2,${s/^.*333.//;p}' | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s, ", $(x), $(x+1); } printf "\n"} ' | sed 's/,\s$//'

    Code:
    stephan@unimatrix ~ $ bash -version
    GNU bash, version 3.2.15(1)-release (i686-pc-linux-gnu)
    Copyright (C) 2005 Free Software Foundation, Inc.
    
    Das ist auch falsch, ich verwende awk und keine Shell for Schleife!!
     
  8. treki

    treki Grünschnabel

    Dabei seit:
    26.05.2007
    Beiträge:
    9
    Zustimmungen:
    0
    So habe jetzt folgendes eingegeben :

    cd /101/source/101/

    ls -l | sed -n '2,${s/^.*101.//;p}' | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s ", $(x), $(x+1); } printf "\n"} '


    leider spuckt er mir jetzt eine andere fehlermeldung aus :(

    sed: 1: "2,${s/^.*101.//;p}": extra characters at the end of p command

    Was kann das jetzt sein?
     
  9. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    "2,${s/^.*101.//;p}": <-- wieso nimmst du " " und nicht die ' '?

    ls -l | sed -n '2,${s/^.*101.//;p}' | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s, ", $(x), $(x+1); } printf "\n"} ' | sed 's/,\s$//'
     
  10. treki

    treki Grünschnabel

    Dabei seit:
    26.05.2007
    Beiträge:
    9
    Zustimmungen:
    0
    Hab ich doch gar nicht :)
    Ich glaube die Terminal-fehlerausgabe legt das nur in"" um den fehlerbereich zu makieren.

    ich habe es eingefügt wie du beschrieben hast!
    ls -l | sed -n '2,${s/^.*101.//;p}' | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s ", $(x), $(x+1); } printf "\n"} '

    Trotzdem hat er da ein problem

    :hilfe2:
     
  11. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Welche sed version?
    Welche shell?
     
  12. treki

    treki Grünschnabel

    Dabei seit:
    26.05.2007
    Beiträge:
    9
    Zustimmungen:
    0
    Ich hoffe ich hab das jetzt richtig herausgefunden:
    habe über Help folgende infos bekommen:

    NU bash, version 2.05b.0(1)-release (powerpc-apple-darwin8.0)

    nur ich weiß nicht wie ich mir die Sed version anzeigen lassen kann (man sed sagt mir nichts zur version:(
     
  13. smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Code:
    stephan@unimatrix ~ $ sed --version
    GNU sed version 4.1.5
    Copyright (C) 2003 Free Software Foundation, Inc.
    This is free software; see the source for copying conditions.  There is NO
    warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE,
    to the extent permitted by law.
    Code:
    stephan@unimatrix ~ $ bash --version
    GNU bash, version 3.2.15(1)-release (i686-pc-linux-gnu)
    Copyright (C) 2005 Free Software Foundation, Inc.
     
  14. treki

    treki Grünschnabel

    Dabei seit:
    26.05.2007
    Beiträge:
    9
    Zustimmungen:
    0
    GNU bash, version 2.05b.0(1)-release (powerpc-apple-darwin8.0)
    Copyright (C) 2002 Free Software Foundation, Inc.

    Sed kennt bei OSX leider den befehl --version nicht :( habe ich jetzt in diversen foren gelesen ...


    kann es sein das das script deshalb nicht funktioniert ?
    kann ich die sed updaten?
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 smg, 03.06.2007
    Zuletzt bearbeitet: 03.06.2007
    smg

    smg Regex Fetischist

    Dabei seit:
    20.05.2007
    Beiträge:
    195
    Zustimmungen:
    0
    Ort:
    /home/stephan/
    Ja klar kannst du Sed updaten, weil bei mir rennt es problemlos durch. Sed wird ja immer benötigt, ein Update wäre sicher nicht schlecht und von Bash auch gleich.

    Mach mal das:

    ls -l | sed -n '2,$p' | sed 's/^.*333\.//' | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s - %s, ", $(x), $(x+1); } printf "\n"} ' | sed 's/,\s$//'
     
  17. #15 Schlaubi_fi.de, 03.06.2007
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Hallo,

    da ich hier auch ein OSX zur Verfügung habe, habe ich mal versucht die Sache
    ein bißchen weiter voran zu treiben :)

    @treki: Also, dass Leute bei der Threaderstellung OS, Bash, sed und andere Versionen
    nicht angeben, die ein Linux haben ist irgendwo noch nachzuvollziehen. MacOSX ist
    schon wieder so exotisch, wenn auch Unix-based, dass man es unbedingt mit angeben muss!

    Zu Deiner Frage, ob man sed oder bash updaten soll:
    Unter Mac OS X ist das so eine Sache, mir ist es schon desöfteren passiert, dass nach einem
    Systemupdate wieder alles auf Standard war oder z.B. nach dem Rechte reparieren
    mit dem Festplattendienstprogramm, der Kompilierungsaufwand ist es fast nicht Wert.

    Zur sed-Version unter Mac OS X (Version 10.4.9) - die Versionsnummer kann ich ebenfalls
    nicht übers System herausfinden, blöd, alles was ich finde ist ein Datum in der Man-Page:
    Code:
    schlaubi:/101/source/101 schlaubi$ system_profiler | grep -E "System Version|Kernel Version"
          System Version: Mac OS X 10.4.9 (8P2137)
          Kernel Version: Darwin 8.9.1
    
    schlaubi:/101/source/101 schlaubi$ hostinfo | grep Darwin
             Darwin Kernel Version 8.9.1: Thu Feb 22 20:55:00 PST 2007; root:xnu-792.18.15~1/RELEASE_I386
    
    schlaubi:/101/source/101 schlaubi$ info sed

    Nun zum Laufen habe ich es schon gebracht, allerdings gibt es in diesem Code
    noch ein "logisches Problem", hier erstmal der unter OSX getestete Code:

    Code:
    schlaubi:/101/source/101 schlaubi$ ls -l 
    total 0
    -rw-r--r--   1 schlaubi  admin  0  3 Jun 14:06 333.0000005.dpx
    -rw-r--r--   1 schlaubi  admin  0  3 Jun 14:06 333.0000006.dpx
    -rw-r--r--   1 schlaubi  admin  0  3 Jun 14:06 333.0005002.dpx
    -rw-r--r--   1 schlaubi  admin  0  3 Jun 14:06 333.0005003.dpx
    -rw-r--r--   1 schlaubi  admin  0  3 Jun 14:06 333.1112201.dpx
    -rw-r--r--   1 schlaubi  admin  0  3 Jun 14:06 333.1112202.dpx
    -rw-r--r--   1 schlaubi  admin  0  3 Jun 14:06 333.1112203.dpx
    
    schlaubi:/101/source/101 schlaubi$ ls |  sed 's/\(^.*333\.\)\(.*\)\(\.dpx\)$/\2/' | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s-%s, ", $(x), $(x+1); } printf "\n"} ' | sed 's/\(.*\)\(, \)$/\1/'
    0000005-0000006, 0005002-0005003, 1112201-1112202
    schlaubi:/101/source/101 schlaubi$ ls |  sed 's/\(^.*333\.\)\(.*\)\(\.dpx\)$/\2/' | awk -F "\n" 'BEGIN { RS="" } { for (x=1; x<NF; x=x+2) { printf "%s-%s,", $(x), $(x+1); } printf "\n"} ' | sed 's/\(.*\)\(,\)$/\1/'
    0000005-0000006,0005002-0005003,1112201-1112202
    Und nun zum logischen Problem - der Code macht nicht ganz das, was Du möchtest *g

    Du möchtest:
    0000005-0000006,0005002-0005003,1112201-1112203

    der Code macht:
    0000005-0000006,0005002-0005003,1112201-1112202
     
Thema:

Brauche Shell script Hilfe - Dateinamen auslesen und sequenzen im string speichern

Die Seite wird geladen...

Brauche Shell script Hilfe - Dateinamen auslesen und sequenzen im string speichern - Ähnliche Themen

  1. Brauche hilfe bei einen Shell Script "-eq Parameter"

    Brauche hilfe bei einen Shell Script "-eq Parameter": Hallo miteinander, bin Neuling in shell Programmierung und brauche etwas Hilfe: und zwar möchte ich einige Zeilen aus einer Datei "user.db"...
  2. 1:1 NAT brauche Hilfe bei der Erstellung eines Shellscripts

    1:1 NAT brauche Hilfe bei der Erstellung eines Shellscripts: Hi, ich brauche Hilfe bei der Erstellung eines Shellskripts, was nach OpenVPN Neueinwahl die Datei /var/db/opt1_ip parst (in dieser Datei steht...
  3. Brauche Hilfe bei Shell Skript

    Brauche Hilfe bei Shell Skript: Hallo, ich möchte ein Skript schreiben, welches mich nur nach einer URL zu einem Video fragt, dieses dann runterlädt und mit mencoder...
  4. FSFE: Bundesnetzagentur will Verbraucher entmündigen

    FSFE: Bundesnetzagentur will Verbraucher entmündigen: Die Free Software Foundation Europe sieht den aktuellen Entwurf der »Transparenzverordnung« der Bundesnetzagentur als Legitimierung einer...
  5. Brauche 2 Skripte

    Brauche 2 Skripte: Hallo Zusammen Ich bin nicht der Programmierer, eher nur der "veränderer". Ich wollte fragen ob mir jemand 2 Skripte Schreiben kann (muss nicht...