Textdatei manipulieren mittels sed

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Captain Crunch, 19.05.2009.

  1. #1 Captain Crunch, 19.05.2009
    Captain Crunch

    Captain Crunch Gott

    Dabei seit:
    15.05.2009
    Beiträge:
    6
    Zustimmungen:
    0
    Ort:
    Dortmund
    Hallo,

    ich möchte aus einer Datei, die dieses Format als Inhalt hat:
    Code:
    1;23.03.2009;15:40;02:30
    1;25.03.2009;05:18;23:35
    3;26.03.3009;09:44;14:05
    3;27.03.2009;06:20;13:10
    
    das Datumsformat ändern. Dazu habe ich mit "cut" die 2. Spalte extrahiert und in dem array "date" gespeichert. dann habe ich erneut mit "cut" das Jahr, den Monat und den Tag in einer Variablen gespeichert, um sie dann anschließend mittels "sed" neu formatiert wieder in die 2. Spalte einzufügen, in einer anderen Datei.

    Hier der gesamte Code:
    Code:
    #!/bin/bash
    
    c=0
    for row in $(cat /home/goofy/xxx.txt) ; do
        date[c]="$(echo ${row} | cut -d ';' -f 2 )"
    
    #   echo ${date[c]}
    
        year="$(echo ${date[c]} | cut -d '.' -f 3 )"
        month="$(echo ${date[c]} | cut -d '.' -f 2 )"
        day="$(echo ${date[c]} | cut -d '.' -f 1 )"
    
        echo ${year}-${month}-${day}
    
        $(sed "s/[0-9][0-9].[0-9][0-9].[0-9][0-9][0-9][0-9]/${year}-${month}-${day}/g" xxx.txt > xxx2.txt)
    
        ((c++))
    done
    
    Bis zum 1. echo scheint alles richtig zu sein. Der sed-Befehl funktioniert grundsätzlich auch, aber er gibt nicht pro zeile ein datum aus, sondern liefert folgenden output:
    Code:
    1;2009-05-15;05:40;09:20
    1;2009-05-15;15:40;13:30
    3;2009-05-15;02:40;15:00
    4;2009-05-15;15:30;11:30
    1;2009-05-15;15:40;18:50
    1;2009-05-15;05:23;09:35
    3;2009-05-15;06:57;03:20
    3;2009-05-15;06:45;10:05
    2;2009-05-15;10:37;11:30
    7;2009-05-15;00:40;19:25
    1;2009-05-15;03:45;09:20
    3;2009-05-15;19:43;10:4
    3;2009-05-15;06:42;10:10
    5;2009-05-15;10:30;11:30
    3;2009-05-16;06:40;10:10
    1;2009-05-16;23:46;10:15
    3;2009-05-16;06:45;10:35
    3;2009-05-16;16:43;10:25
    2;2009-05-16;17:30;01:30
    1;2009-05-16;09:40;14:05
    1;2009-05-16;05:30;10:21
    3;2009-05-16;06:40;17:05
    7;2009-05-16;06:53;17:55
    1;2009-05-16;13:41;19:05
    4;2009-05-16;18:50;13:15
    
    Gibt also jeden Tag etliche male aus, obwohl es pro Tag nur einen, maximal 3 Einträge gibt

    Wo ist mein Denkfehler? Ist bestimmt nur eine Kleinigkeit, komme aber gerade nicht drauf :-/
     
  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 floyd62, 19.05.2009
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Hi,

    sieht mir auf den ersten Blick so aus, als ob du die Eingabedatei zeilenweise einliest, für jede einzelne Zeile das "date[c]" umformatierst, dann die ganze Datei durch den sed jagst, und dabei die Ergebnisse aus den vorherigen Durchgängen (mit "... >xxx2.txt") überschreibst ...

    Eventuell kannst du ja das Ganze durch einen sed-Einzeiler ersetzen, etwa so:
    Code:
    sed -e 's/\([0-9]*\);\([0-9]*\).\([0-9]*\).\([0-9]*\);\(.*\)/\1;\4-\3-\2;\5/' <xxx.txt >xxx2.txt
    
    (Schnellschuss, ungetestet etc. ...)

    Grüsse,
    A.
     
  4. #3 HeadCrash, 19.05.2009
    HeadCrash

    HeadCrash Routinier

    Dabei seit:
    16.05.2009
    Beiträge:
    482
    Zustimmungen:
    1
    Ort:
    Bayern
    Abend,

    muss es unbedingt sed sein?

    Sonst würde ich sagen nimm doch einfach awk
    awk -F\; '{ split($2, datum, ".") ; print ($1";"datum[3]"-"datum[2]"-"datum[1]";"$3";"$4) }' input.txt
     
  5. #4 Captain Crunch, 20.05.2009
    Zuletzt bearbeitet: 20.05.2009
    Captain Crunch

    Captain Crunch Gott

    Dabei seit:
    15.05.2009
    Beiträge:
    6
    Zustimmungen:
    0
    Ort:
    Dortmund
    [gelöst] Textdatei manipulieren mittels sed

    Danke euch beiden,

    ich habe gleich beide Lösungen ausprobiert und sie funktionieren beide. Da habe ich wohl etwas zu kompliziert gedacht. Habe aber auch wieder viel dazugelernt.

    Der Test mit "time" hat ergeben, dass in diesem Fall "awk" etwas schneller arbeitet als "sed":
    Code:
    time sed -e 's/\([0-9]*\);\([0-9]*\).\([0-9]*\).\([0-9]*\);\(.*\)/\1;\4-\3-\2;\5/' <xxx.txt >xxx2.txt
    
    real    0m0.007s
    user    0m0.003s
    sys     0m0.003s
    
    Code:
    time awk -F\; '{ split($2, datum, ".") ; print ($1";"datum[3]"-"datum[2]"-"datum[1]";"$3";"$4) }' xxx.txt > xxx2.txt
    
    real    0m0.005s
    user    0m0.003s
    sys     0m0.000s
    
     
  6. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Textdatei manipulieren mittels sed

Die Seite wird geladen...

Textdatei manipulieren mittels sed - Ähnliche Themen

  1. Timestamp an Inhalt einer Textdatei anfügen

    Timestamp an Inhalt einer Textdatei anfügen: Hallo, ich als neuer, unerfahrener Nutzer von Linux und der bash hätte folgende Frage. Und zwar würde ich gerne mit einem command den Zeitstempel...
  2. Textdatei zeilenweise in durchnummerierte Variablen schreiben

    Textdatei zeilenweise in durchnummerierte Variablen schreiben: Hi Leute, ich versuche folgendes Problem zu lösen. Ich möchte eine Textdatei einlesen und den Inhalt jeder Zeile in immer eine neue Variable...
  3. SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird

    SSH Login nur mit einer bestimmten IP die in einer Textdatei gespeichert wird: Hallo Ich bin andauernd Opfer einer Brute Force Attacke. Die IPs die fehlerhafte Logins produzieren werden nach dem 3ten Versuch gesperrt. Aber...
  4. Programm für Audiodatei in Textdatei konvertieren

    Programm für Audiodatei in Textdatei konvertieren: Hallo, ich habe für ein Projekt eine Menge Interviews geführt und habe diese digital auf dem Rechner. Allerdings dauert das Abtippen ewig....
  5. nach einem wort in einer textdatei suchen

    nach einem wort in einer textdatei suchen: halloooo ihr lieben, ich hoffe ihr könnt mir weiterhelfen :) ich lernen momentan die skriptsprache shell und alles was dazu gehört. ich soll...