Datum mit sed erkennen und editieren

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Xerophyt, 03.08.2006.

  1. #1 Xerophyt, 03.08.2006
    Xerophyt

    Xerophyt Grünschnabel

    Dabei seit:
    03.08.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    Schenefeld (HH)
    Hallo,

    ich beginne gerade, mich mit der Shellprogrammierung zu beschäftigen. Einiges habe ich hier im Forum schon gelesen, komme aber jetzt nicht so richtig weiter.

    In Tabellen, die in einem oder mehreren Feldern ein Datum enthalten können, ist dieses Datum in der Form

    6112005, 5042006, also siebenstellig ohne führende Null beim Tagesdatum<10 und
    12012006, ... , also achtstellig wenn Tagesdatum > 9.

    In dieser Form können die Daten nicht wie gewollt weiterverarbeitet werden (Excel).

    Der unten angegebene Code ergibt als Ausgabe:
    06112005
    05042006
    012012006

    Code:
    sed '/\([0-9][0-9][0-9][0-9][0-9][0-9][0-9]\)/ s//'0'\1/g' datei1 > datei2
    Dieser Code setzt in allen Feldern der Tabelle, in denen er eine siebenstellige Zahl findet, eine Null davor (ist mir soweit auch einleuchtend).

    Ich möchte aber, dass nur Felder mit genau sieben Zahlen mit einer führenden Null versorgt werden und die 8-stelligen unverändert bleiben.

    Kann mir dafür jemand einen Tip geben?

    Vielen Dank!
     
  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 Xanti, 03.08.2006
    Zuletzt bearbeitet: 03.08.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Du könntest das Zeichen vor und nach der Zahl ins Muster einbeziehen. Da ich nicht weiss, wie datei1 aussieht, hier ein Vorschlag, falls pro Zeile eine Zahl steht. Wenn die Datei anders aussieht, einfach nochmal posten:

    Code:
    sed '/^\([0-9]]\{7\}\)$/ s//0\1/g' datei1 > datei2
    Gruss, Xanti
     
  4. #3 Xerophyt, 03.08.2006
    Zuletzt bearbeitet: 03.08.2006
    Xerophyt

    Xerophyt Grünschnabel

    Dabei seit:
    03.08.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    Schenefeld (HH)
    Hallo Xanti,

    vielen Dank für die Antwort. Klappt aber leider nicht. Vor und nach der Zahl steht der Feldtrenner (z.B. Pipe). Die Tabellenfelder können String-, Integer- oder Gleitkomma-Werte enthalten. Die Datumsfelder stehen in verschiedenen Tabellen an unterschiedlichen Positionen im Datensatz.

    Ich habe mal einige Datensätze zur Veranschaulichung im Anhang mitgeschickt (hoffe das war alles richtig). Das vorletzte Feld ist in diesem Fall ein Datum (je Satz zwei Datumsfelder).

    Gruß Xerophyt

    Ich vermute, dass "Direkt antworten" der richtige Weg gewesen wäre. (s. oben links: Grün...)
     

    Anhänge:

    • bsp.txt
      Dateigröße:
      705 Bytes
      Aufrufe:
      3
  5. #4 Wolfgang, 03.08.2006
    Zuletzt bearbeitet: 03.08.2006
    Wolfgang

    Wolfgang Foren Gott

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

    Sinnigerweise gibt es dafür auch sowas wie printf. ;)
    In ein while read eingepackt, lassen sich so Strings nach belieben formatieren.

    Code:
    while read Feld1 Feld2 Datum Rest;
    do
    printf "%s\t%s\t[b]%[color=red]08[/color]d[/b]\t%s\n" $Feld1 $Feld1 $Datum "$Rest";>output_file
    done <input_file
    
    Die Felder musst du natürlich selbst wissen, und den IFS entsprechend anpassen (falls Semikola oder Komma verwendet wird.)
    Wenn keine feste Feldlänge vorliegt, wird es etwas komplizierter.

    Im Fall von sed funktioniert Xanti sein Vorschlag, wenn der Ziffenrstring am Ende steht.
    Sonst würde ich auf eine 7-stellige Ziffernfolge an einer Wortgrenze matchen.
    Code:
    sed -e 's/[^[:space:]]+\([[:digit:]]\{7\}\)[^[:space:]]+/ 0\1 /g' Input >Output
    Mein sed kennt kein lookahead.
    Statt [:space:] Kannst du auch ein anderes Trennzeichen verwenden.

    In wie weit das portable ist, hängt von dem verwendeten sed ab.
    Es gibt da auch noch Perl (kennt auch printf) oder awk (kennt auch printf).
    Beide können sehr gut mit Feldern umgehen, wobei Perl performanter ist. ;)

    Gruß Wolfgang

    Fipptehler behoben ;)
     
  6. #5 Xerophyt, 03.08.2006
    Zuletzt bearbeitet: 03.08.2006
    Xerophyt

    Xerophyt Grünschnabel

    Dabei seit:
    03.08.2006
    Beiträge:
    3
    Zustimmungen:
    0
    Ort:
    Schenefeld (HH)
    Hallo Wolfgang, Hallo Xanti,

    in dem 'while read'-Beispiel muss ich das aber für jede Tabelle (haben alle unterschiedliche Anzahl von Feldern) machen. Deinen zweiten Vorschlag habe ich entsprechend angepasst. Das ist im Prinzip das, was Xanti vorher vorgeschlagen hatte: Trennzeichen-7 Zahlen-Trennzeichen. Die Trennzeichen werden wieder eingefügt und das liefert das gewünschte Ergebnis.

    Vielen Dank für die prompte Unterstützung.

    Gruß Xerophyt

    Ich konnte schon was damit anfangen ;) Danke!
     
Thema:

Datum mit sed erkennen und editieren

Die Seite wird geladen...

Datum mit sed erkennen und editieren - Ähnliche Themen

  1. Shell-Skript Datum in einer Datai suchen

    Shell-Skript Datum in einer Datai suchen: Hallo zusammen Ich komm eigentlich aus der Klicki-Bunti-Welt von Windows. Seit geraumer Zeit versuche ich meine Künste mit verschiedenen...
  2. Wie kann ich im AIX x Tage vom Datum subtrahieren ?

    Wie kann ich im AIX x Tage vom Datum subtrahieren ?: Für ein Skript unter AIX brauche ich einen Code, der mir vom aktuellen Datum 7 Tage abzieht und das Datum im gewünschten Format ausgibt. Hat...
  3. Wie filtere ich nach Datum um Files zu löschen

    Wie filtere ich nach Datum um Files zu löschen: Ich möchte alle *.sql Dateien löschen die älter als 20 Tage sind. Die Verbindung mache ich von einem RedHat auf eine Windows 2008 Server....
  4. Dateien nach Datum finden

    Dateien nach Datum finden: Hallo zusammen, ich würde gerne Wissen wie ich am einfachsten Dateien nach einem bestimmten Datum in einem Verzeichnis suchen kann. Das...
  5. Linux Mint & Evolution => Mails nach Datum sortieren

    Linux Mint & Evolution => Mails nach Datum sortieren: Hallo Leutz, ertmal hallo, bin hier neu :D. Bin mit nicht ganz sicher, ob das Theme hier rein passt, wab aber nichts besseres gefunden....