Dateiverarbeitung in einem Shellscript

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

Hinweis: In dem Thema Dateiverarbeitung in einem Shellscript gibt es 9 Antworten. Der letzte Beitrag () befindet sich ganz unten auf dieser Seite.
  • Dateiverarbeitung in einem Shellscript

    Hallo zusammen, ?(
    bin kurz vor dem Verzweifeln. Habe mich in Foren und auch den Helps umgesehen, aber nichts gefunden, was mein Anliegen voranbringt.
    Im Verzeichnis /var/spool/ steht genau eine Datei. Den Dateinamen kenne ich nicht, hat aber die Anfangssyntax "KREP" gefolgt von weiteren unbekannten Zeichen.
    Die Datei hat eine unbekannte Anzahl Zeilen. Die Zeilen haben eine unbekannte Länge. Die Zeilen beginnen mit verschiedenen Buchstabensequenzen.
    Diese Datei möchte ich zeilenweise einlesen und dabei überprüfen, welche Buchstaben bis zum ersten Auftreten eines Semikolons stehen.
    Stehen bestimmte Schlüsselbuchstaben in dem Teil der Zeile, dann soll die gesamte Zeile in eine neue Datei geschrieben werden.

    Mit

    Shell-Script

    1. DATEI=$(ls /var/spool/KREP*)
    2. echo $DATEI
    bekomme ich nicht mal den Dateinamen allein, sondern den ganzen Pfad.
    Es ist zum Verzweifeln. ?(

    Vielen Dank
    Thomas

    Für den Inhalt des Beitrages 126649 haftet ausdrücklich der jeweilige Autor: Thomas220

  • Ihr Hausaufgabenspezialist empfiehlt:

    Shell-Script

    1. awk -F';' '{print$1}' /var/spool/KREP*
    Und weil du ja nur sehr unbestimmt von bestimmten Zeichenfolgen schreibst, wirst du den Rest nicht zur Strafe, sondern nur zur Übung selbst basteln müssen.
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 126654 haftet ausdrücklich der jeweilige Autor: Berichtigung

  • Hallo zusammen,
    vielen Dank.
    Es ist keine Schulaufgabe. Auch wenn man nie auslernt.
    Getreu dem Sprichwort: Wenn du denkst es geht nicht mehr, kommt von irgendwo ein Licht daher, habe ich auf dieser Seite, nach meinen Beitrag, weiter gesucht und bin schließlich hier fündig geworden:
    sed
    Bis dahin wusste ich nicht einmal, was sed überhaupt ist. Ich habe zwar schon einige Codezeilen damit gesehen, aber was sie bedeuteten, habe ich nicht erkannt.
    Nachdem ich mich mit dem Tutorial beschäftigte, habe ich schließlich diese Codezeilen geschrieben und auf einmal waren alle Sorgen vergessen:

    Shell-Script

    1. DATEI=$(ls -A /var/spool/ERS*)
    2. sed -n -e '/KREP/w /var/spool/KREP.csv' $DATEI
    Mit awk habe ich das auch probiert, habe aber kein richtiges Ergebnis erzielt.

    Dennoch vielen Dank für die Hilfsangebote.
    Sicher komme ich gerne wieder darauf zurück.

    Schönes WE

    Thomas

    Für den Inhalt des Beitrages 126702 haftet ausdrücklich der jeweilige Autor: Thomas220

  • Es ist sehr schlechter Stil, den formatierten Output von ls zu parsen.
    Gewöhn' dir das ab. Das ist fehlerträchtig und garantiert nicht portabel.

    Dein Problem wird korrekt (und portable -solange GNU- sed verwendet wird) so gelöst;
    sed -n -e '/KREP/w /var/spool/KREP.csv' /var/spool/ERS*

    Am Rande: Jetzt heißt die Eingabedatei plötzlich nicht mehr KREP<irgendwas>
    Sokrates sagte, dass er nichts wisse.
    Ich bin viel, viel klüger als Sokrates.
    Ich weiß ganz genau, dass ich gar nichts weiß.

    Für den Inhalt des Beitrages 126735 haftet ausdrücklich der jeweilige Autor: Berichtigung

  • Hallo Berichtigung, leider klappt das nicht so gut mit der E-Mail Benachrichtigung, deshalb antworte ich erst heute.
    Vielen Dank für die einfache Zeile, in der alles enthalten ist.
    Die Datei hat nun tatsächlich das Muster 'ERS*'. Allerdings gibt es da auch noch welche mit den Mustern 'KREP*', 'MPS*', 'MSG*' und 'HEADER*'.
    Aber in verschiedenen Verzeichnissen und da habe ich was durcheinander gebracht ;)

    Danke. Thomas

    Für den Inhalt des Beitrages 126839 haftet ausdrücklich der jeweilige Autor: Thomas220

  • Thomas220 schrieb:

    Hallo zusammen, ?(
    bin kurz vor dem Verzweifeln. Habe mich in Foren und auch den Helps umgesehen, aber nichts gefunden, was mein Anliegen voranbringt.
    Im Verzeichnis /var/spool/ steht genau eine Datei. Den Dateinamen kenne ich nicht, hat aber die Anfangssyntax "KREP" gefolgt von weiteren unbekannten Zeichen.
    Die Datei hat eine unbekannte Anzahl Zeilen. Die Zeilen haben eine unbekannte Länge. Die Zeilen beginnen mit verschiedenen Buchstabensequenzen.
    Diese Datei möchte ich zeilenweise einlesen und dabei überprüfen, welche Buchstaben bis zum ersten Auftreten eines Semikolons stehen.
    Stehen bestimmte Schlüsselbuchstaben in dem Teil der Zeile, dann soll die gesamte Zeile in eine neue Datei geschrieben werden.

    Mit

    Shell-Script

    1. DATEI=$(ls /var/spool/KREP*)
    2. echo $DATEI
    bekomme ich nicht mal den Dateinamen allein, sondern den ganzen Pfad.
    Es ist zum Verzweifeln. ?(

    Vielen Dank
    Thomas
    Wenn Du nach einer/mehrerer Dateien suchst, solltest Du das nicht mit ls machen, sondern mit einem find Befehl.
    Find ist sehr mächtig, mit dem kannst du praktisch alles gezielt finden, parsen, verändern etc.

    Und als Ergebnis den gesamten Pfad zu haben ist so schlecht nicht. Musst halt den String dann auseinander schneiden um an den Dateinamen zu kommen.
    Da der das allerletzte Element in der oder den Zeilen dieser Rückgabe ist, kannst Du sowas drauf loslassen und hast den Dateinamen: ${i##*/}
    i steht hier als Variable im find der der Pfad samt Datei steht also sowas wie /var/spool/test.txt. die Ausgabe von ${i##*/} ist dann test.txt.
    Damit hast Du die Datei und kannst dann den sed drauf loslassen.

    Wenn find Dir mehrere Dateien ausspuckt, musst Du das halt in ein array einlesen und dieses dann Element für Element durchgehen (for oder while Schleife) und Deine Verarbeitungen darauf loslassen.
    Viele Grüße,
    T.

    Für den Inhalt des Beitrages 126842 haftet ausdrücklich der jeweilige Autor: Tamerlain

  • Hallo Tamerlain,
    vielen Dank für die Information.
    Derzeit brauche ich das so nicht. Aber das wird sich sicherlich mal ergeben und dann ist es gut zu wissen, dass es hier Hilfe gab.

    Viele Grüße
    Thomas

    Für den Inhalt des Beitrages 126974 haftet ausdrücklich der jeweilige Autor: Thomas220