Anzeige:
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 15 von 16

Thema: Zeichen löschen! sed? awk? perl?

  1. #1
    Registrierter Benutzer
    Registriert seit
    07.02.2007
    Beiträge
    13

    Zeichen löschen! sed? awk? perl?

    Hallo zusammen,
    da ich Anfänger in Sachen script bin, brauche ich eure Hilfe.
    Ich habe ein file mit ca. 300 bis 500 Zeilen. Jede Zeile hat 269 Zeichen.
    Nun möchte ich das in jeder Zeile die Zeichen von 100 bis 120, von 135 bis 180 und von 208 bis 250 gelöscht werden.
    Ich habe mit sed experimentiert, aber keine richtige Lösung gefunden (Anfänger ).
    Ich wäre euch echt dankbar wenn Ihr mir bei dem Problem helfen könntet.

    Danke und Gruß
    Athos

  2. #2
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74
    Probiers mit "cut"!

    nutze es so, das es jedes Zeichen als Spalte interpretiert. Dann kannst du bei "--fields" die gewünschten Spalten definieren.

    Grüße, Florian

    EDIT: Geht ja gar nicht, cut braucht ja auch ein bestimmtes Zeichen zum trennen

    Moment, ich grüble...

  3. #3
    Registrierter Benutzer
    Registriert seit
    07.02.2007
    Beiträge
    13
    Hallo qeldroma,
    ich könnte ja die zu löschenden Zeichen mit eine ; eingrenzen. Hilft das vieleicht?

    Gruß
    Athos

  4. #4
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74
    Ok, so würde ich es machen:
    Code:
    # cat deineDatei|sed -e "s/\(.\{100,120\}\).*\(.\{135,180\}\).*\(.\{208,250\}\)/\1\2\3/"
    Dies ist die komplizierte Variante, wo mit den tatsächlichen Stellen gearbeitet wird.

    Variante zwei sit die grundsätzlich einfachste:
    Du hast irgendwelche Trennerzeichen, anhand derer die Spalten definiert sind. Dann solltest du "cut" nehmen, das ist dann simpel.

    Poste doch mal drei/vier Zeilen des Files und was du dann als Ergebnis davon sehen möchtest?

  5. #5
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74
    Ok, die sed Variante wird nicht klappen

    Spannend, spannend.......

    Kannst du mit "cut" weitermachen?

  6. #6
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74
    So müßte es "sedden":

    Code:
    # cat deineDatei|sed -e "s/.\{99\}\(.\{20\}\).\{34\}\(.\{45\}\).\{27\}\(.\{42\}\).*/\1\2\3/"
    Es lässt nun die Zeichen 1-99 weg, nimmt die folgenden 20, lässt die folgenden 34 weg... usw.
    Zum Schluß fügt er nur die rund eingeklammerten wieder ein.

    Kann sein, daß du noch plusminus ein Zeichen jeweils schieben mußt, aber ansonsten sollte das nun laufen...

    Grüße, Florian

  7. #7
    Registrierter Benutzer
    Registriert seit
    07.02.2007
    Beiträge
    13
    Ich habe Dein script getestet, leider ohne erfolg.
    Hier eine Zeile. Die sind immer gleich.
    xxxxxxxxxxxxxxx200611300718190 xxxxxxxxxx xxxxxxxxxxx xxxxxxxxxxx 0000000000.0220000000000000000.0000000000000000000 .000000000000000000000000000000000880000xxxxxxxxx 000000

    Gruß
    Athos

  8. #8
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74
    Na da hast du doch Leerzeichen? Kann man die als Trennzeichen sehen? Wie soll denn dann das Ergebnis nun ausschauen?

  9. #9
    Registrierter Benutzer
    Registriert seit
    07.02.2007
    Beiträge
    13
    Eigentlich ist es so gedacht.
    Mit sed 's/\(.\{15\}\)/\1;/' usw. die ; einfügen damit man ein Trenzeichen für die db hat. Nur die vielen 0000 stören. Ich kann aber nicht einfach alle weg machen da ich ja noch ein paar brauche ;-)
    Das Ergebnis sollte so aussehen.
    xxxxxxxxxxxxxxx; 20061130;071819; 0; xxxxxxxxxx; xxxxxxxxxxx; xxxxxxxxxxx; 022880; xxxxxxxxx 000000

    Gruß
    Athos
    Geändert von athos (07-02-2007 um 13:07 Uhr)

  10. #10
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74
    ok.
    Code:
    cat Datei|sed -e "s/ /;/g"|cut -d";" -f2-4,8,10
    Er macht jedes Leerzeichen zu einem Semicolon, gibt dann die Spalten 2-4,8 und 10 aus.

  11. #11
    Registrierter Benutzer
    Registriert seit
    07.02.2007
    Beiträge
    13
    Aha, das bedeutet also immer zwischen zwei Semicolon (;000; ) ist eine Spalte?
    Gruß
    Athos

  12. #12
    Registrierter Benutzer
    Registriert seit
    07.02.2007
    Beiträge
    13
    ich bekomme nur ;;;; zusehen. Wenn er aus jedem Leerzeichen ein Semicolon macht bleiben aber immer noch ein haufen Zeichen übrig.
    Gruß
    Athos

  13. #13
    Registrierter Benutzer
    Registriert seit
    25.10.2002
    Beiträge
    74
    Schau dir mal das Ergebnis vor der Pipe an. Ist das, wie erwartet?
    was ergibt also cat Datei|sed -e "s/ /;/g" ?

  14. #14
    Registrierter Benutzer
    Registriert seit
    07.02.2007
    Beiträge
    13
    Nee, leider nicht. Da werden nur die Leerfelder mit ; gefüllt.
    Ich habe nun folgendes getan.
    Alle Zeichen die ich brauche sind nun mit ; eingeschlossen uns alle Zeichen die ich nicht brauche fangen mit A an und mit B auf. Nun müüsste man eine möglichkeit finden um alles von A bis B zu löschen. Zwischen A und B sind nur Nullen oder Leerfelder.
    Gruß
    Athos

  15. #15
    Registrierter Benutzer
    Registriert seit
    07.02.2007
    Beiträge
    13
    OK, denke ich habe die Lösung.
    Da viele files in einem Verzeichnis liegen habe ich folgendes gemacht.

    cat script # hier werden die files nacheinander aufgerufen
    for i in $(ls -1 U*); do sed -f cdr_fin ${i%/*} > ${i%/*}.fin; done

    cat cdr_fin # hier werden die Zeichen eingefügt
    s/\(.\{15\}\)/\1;/
    ......
    s/\(.\{132\}\)/\1A/
    ..........

    und mit
    sed -r 's/\A.{40}//'
    werden die Zahlen die ich nicht brauche gelöscht.

    Ist vielleicht nicht der Hit aber für den Anfang nicht schlecht
    Für Verbesserungsvorschläge bin ich immer zu haben
    Geändert von athos (08-02-2007 um 08:10 Uhr)
    Gruß
    Athos

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •