"Zahlersetzung"

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von speeder84, 12.11.2005.

  1. #1 speeder84, 12.11.2005
    Zuletzt bearbeitet: 12.11.2005
    speeder84

    speeder84 Grünschnabel

    Dabei seit:
    12.11.2005
    Beiträge:
    4
    Zustimmungen:
    0
    Hallo alle Shell Profis :D !!

    Ich habe folgendes Problem und möchte dieses per Shell Skript lösen:

    Ich habe eine Datei mit vielen Zeilen. Jede Zeile halt Spalten die per Komma getrennt sind. In der 1. Spalte stehen Namen, wie zum Beispiel ABBSS0112 und danach stehen viele von Komma getrennte Werte. Ich möchte diese Werte normalisieren, d.h. alle Werte die kleiner 30 (auch "Minus") sollen durch 30 ersetzt werden und alle die größer als 100 sollen durch 100 ersetzt werden. Die erste Zeile soll außerdem so bleiben wie sie ist.

    Beispielzeile:

    ABBSS0112,-43,5439,89,932,1,31,30,100

    aus dieser soll dann folgendes werden:

    ABBSS0112,30,100,89,100,30,31,30,100

    Ich habe schon verschiedenes probiert, wie zum Beispiel sed, aber ich hatte immer das Problem, dass wenn ich die "," mit in den zu suchenden String eingeben habe, hat er nur jeden 2. Wert ersetzt!? :think:

    Da habe ich gedacht, das es womöglich mit awk, oder sowas in der Art besser geht, aber da bin ich bis heute nicht geschafft.

    Ich bin für jede Hilfe dankbar. :))

    MFG
    Speeder
     
  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, 13.11.2005
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Auch hier wieder viele Möglichkeiten.
    Ich greif mal einen Perleinzeiler raus. ;)
    Wenn
    cat test

    Kopfdaten der ersten Zeile
    ABBSS0112,-43,5439,89,932,1,31,30,100
    ABBSS0112,20,5439,89,932,1,-31,30,100
    ABBSS0112,20,5439,89,932,1,-31,30,500
    ABBSS0115,20,5439,89,932,1,-31,30,500

    ausgibt
    dann sollte der...
    Code:
    perl -a -F, -nle '($.>1)?print shift @F,",",join",",map{($_<30)?30:($_>100)?100:$_}@F:print $_' test
    

    Kopfdaten der ersten Zeile
    ABBSS0112,30,100,89,100,30,31,30,100
    ABBSS0112,30,100,89,100,30,30,30,100
    ABBSS0112,30,100,89,100,30,30,30,100
    ABBSS0115,30,100,89,100,30,30,30,100

    ausgeben.
    Ist es das was du wolltest?

    Gruß Wolfgang
     
  4. #3 speeder84, 13.11.2005
    Zuletzt bearbeitet: 13.11.2005
    speeder84

    speeder84 Grünschnabel

    Dabei seit:
    12.11.2005
    Beiträge:
    4
    Zustimmungen:
    0
    Perfekt :)) !! Genau das was ich wollte in einer Zeile. Vielen Dank Wolfgang

    Aber ich habe das noch nicht ganz verstanden was die ganzen Parameter machen. Könntest du das vielleicht kurz erklären? Das wäre echt toll.

    Gruß
     
Thema:

"Zahlersetzung"