sed in awk-Arrays

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von JCB, 05.05.2006.

  1. JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    Hallo,

    ich habe leider keine Lösung für mein Problem gefunden: Ich bekomme eine Textdatei(Feste Feldlänge!! die ich kenne) in dieser Textdatei sind Umlaute vom Erstellungsprogramm zerschossen worden. Nun habe ich folgenden Plan:
    Code:
    awk 'BEGIN{FIELDWIDTHS="2 9 90 90 1 64 64 30 30 20 6 3 3 4 3 9 1 32 30 30 30 20 6 3 3 4 3 9 1 16 5 4 16 16 16 60 60 41 4 4 4 4 4 4 8 3 4 18 1 15 4 7 1 7 1 1 1 3 1 1 1 2 9 8 2 9 90 64 30 30 20 6 3 4 3 9 1 2 9 90 64 30 30 6 3 4 9 1 2 9 90 64 30 30 20 6 3 4 3 9 1 5 9 2 8 16"};{ ++array[$0] } END { for(x in array) print(sed -f script.sed word[x])}' testfixed.txt 
    
    Also testfixed.txt ist die Datei die es zu Bearbeiten gilt. script.sed ist das Script welches die Übersetzungen vornimmt. Dies arbeitet auch super, wenn man es allein auf die Datei loslässt. Leider aber nicht mit dem gewünschten Ergebnis. Das zeichen welches z.B ein "ü" darstellen soll ist ein "ö", wenn ich also einfach sed werkeln lasse verkürzt sich der String und meine Festen Feldlängen sind im Eimer.

    Fraglich ist aber hier auch noch, selbst wenn ich (mit eurer geneigten Hilfe) dieses Script so Laufen lasse, awk auch die Feldlänge in Original wieder zurückschreibt??

    Ich bin für alles offen, denn sonst bleibt mir morgen nur noch der Weg:
    FixedLength >> Mysql >> CSV >> sed >> Mysql >>FixedLength :(

    Bin für jeden Tipp dankbar,

    JCB
     
  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 Wolfgang, 05.05.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Warum nimmst du nicht einfach recode?
    Dir sind doch sicher der Eingabezeichensatz und der Ausgabezeichensatz bekannt.

    Gruß Wolfgang
    PS Was in deinem sed-script steht, kann keiner hier erahnen.
     
  4. JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    Hallo Wolfgang,

    danke für deine Antwort. Recode kann hier glaub ich nicht helfen, da diese "Missumlaute" nicht immer auftreten, sondern nur in einigen Datensätzen. In den anderen wird äüö richtig dagestellt. Mein sed Script:
    Code:
    root@KanoServer:# cat script.sed
    s/ö/ö/g
    s/ü/ü/g
    s/ä/ä/g
    w scriptergebnis.txt
    root@KanoServer:#
    
    Recode macht meines erachten nur eine umcodierung in verschiedene Zeichensätze. Das ist hier aber nicht das Ziel.

    Sollte der Code von oben grundsätzlich funktionieren, oder hab ich da noch n Schnitzer drin?

    Gruß und Danke,

    JCB
     
  5. #4 Wolfgang, 06.05.2006
    Wolfgang

    Wolfgang Foren Gott

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

    Dein Problem ist nicht sed, sondern offensichtlich wird die Feldlänge falsch übergeben.
    Sprich ö wird als zwei Zeichen gewertet.
    Wenn dem so ist, hast du ein ordendliches Zeichencode Problem.
    Deshalb habe ich auch recode empfohlen.
    Ich sehe hier im Moment keine andere Lösung, als dem Ausgabeprogramm den richtigen Zeichencode bezubringen. Wenigstens sollten verschiedene Zeichencodierungen nicht in einer Datei landen.
    Natürlich bin ich nicht der Guru, aber solche Probleme mit vermischten Zeichensätzen innerhalb einer Datei sind mit sed für mich unlösbar.

    Gruß Wolfgang
     
  6. JCB

    JCB Mitglied

    Dabei seit:
    27.02.2006
    Beiträge:
    42
    Zustimmungen:
    0
    Hallo Wolfgang,

    ok, dir glaub ich das. Dann wohl doch mit M$ Access. So lange der Fehler noch anhält.

    Danke für deine Mühe,

    Jens
     
Thema:

sed in awk-Arrays