Text ersetzen - (schon wieder - ich weiß)

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von michael77, 25.03.2009.

  1. #1 michael77, 25.03.2009
    Zuletzt bearbeitet: 25.03.2009
    michael77

    michael77 Jungspund

    Dabei seit:
    18.07.2006
    Beiträge:
    11
    Zustimmungen:
    0
    Moin Forum,

    ich muss in einer Datei wenn Bedingung A und B erfüllt ist, einen Wert in einer bestimmten Spalte ändern.

    Genauer:
    Wenn in der 1. Spalte ein "A" ist und in der 4. Spalte der Wert "40", muss ich die "40" durch eine "60" ersetzen.
    Es können beliebig viele Zeilen zwischen den Zeilen mit einer "A"-Spalte sein.

    Das suchen und ersetzen via awk sieht (dank Gott_in_schwarz in einem älterem Beitrag) schon einmal gut aus -

    Nur, wie bekomme ich das wieder in die Datei rein?

    awk - Einzeiler:
    Code:
    awk -F';' 'BEGIN{OFS=";"} {if ($1 == "A") {if ($4 == "40")  {$4 = "60"; print $0}}}' DATANORM.001

    Auszug aus den gegebenen Daten:
    Code:
    [...]
    A;N;1135005223;[B]40[/B];Roth Klemmverschraubung 20mm; ;1;0;ST;490;41;30;00000994;
    B;N;1135005223; ; ; ;0;0;0;4037115024689;RWU00082.tif;3090;0;10; ; ;
    D;N;1135005223;1;F;;Verpackungseinheit: 10 St<81>ck;;;;;
    A;N;1135005238;[B]40[/B];Roth WP-W<84>rmemengenz<84>hler/Gr<94>áe 1; ;1;0;ST;33000;53;38;00001040;
    B;N;1135005238; ; ; ;0;0;0;4037115024696;RWU00742.tif;3890;0;1; ; ;
    D;N;1135005238;1;F;;Nennweite:                DN 20;;;;;
    D;N;1135005238;2;F;;Nenndurchfluss:           2,5 m3/h;;;;;
    D;N;1135005238;3;F;;Betriebstemperatur:       5-90'C;;;;;
    D;N;1135005238;4;F;;Druckstufe:               PN 16;;;;;
    D;N;1135005238;5;F;;Anschlussgewinde:         R 3/4";;;;;
    D;N;1135005238;6;F;;L<84>nge mit Verschraubung:  230 mm;;;;;
    D;N;1135005238;7;F;;Gewicht 0,8 kg;;;;;
    D;N;1135005238;8;F;;Einsatz:;;;;;
    D;N;1135005238;9;F;;TerraCompact B 6-10 kW, TerraCompact;;;;;
    D;N;1135005238;10;F;;6-12 kW (PC), AuraCompact P 8 kW,;;;;;
    D;N;1135005238;11;F;;AuraModul 12 kW, AuraModul 7-12 kW E,;;;;;
    D;N;1135005238;12;F;;AquaCompact 11-13 kW;;;;;
    A;N;1135005239;[B]40[/B];Roth WP-W<84>rmemengenz<84>hler/Gr<94>áe 2; ;1;0;ST;75500;53;38;00001040;
    [usw]
    Gruß Michael
     
  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 Gott_in_schwarz, 25.03.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Über ne temporäre Datei:
    Code:
    awk -F';' 'BEGIN{OFS=";"} {if ($1 == "A") {if ($4 == "40")  {$4 = "60"; print $0}}}' DATANORM.001 > /tmp/TMPFILE &&
    mv -i /tmp/TMPFILE DATANORM.001
     
  4. #3 michael77, 25.03.2009
    michael77

    michael77 Jungspund

    Dabei seit:
    18.07.2006
    Beiträge:
    11
    Zustimmungen:
    0

    Danke, erstmal, aber das ist es eben nicht.

    Damit hab ich bloss die geänderten Zeilen in der neuen Datei - ich brauche aber auch den Rest.

    Datei nach deinem Vorschlag:
    Code:
    A;N;1110000823;60;Roth Abschlusswinkelset; ;1;0;ST;955;51;35;00000899;
    ########## hier fehlt was ########
    A;N;1110000824;60;Roth Schraubenset M10; ;1;0;ST;158;51;35;00000900;
    A;N;1110000825;60;Roth Befestigungselement D; ;1;0;ST;1960;51;35;00000904;
    A;N;1110000826;60;Roth Befestigungselement E; ;1;0;ST;2380;51;35;00000902;
    A;N;1110000827;60;Roth Sicherungsset; ;1;0;ST;158;51;35;00000903;
    
    Orginal:
    Code:
    [...]
    A;N;1110000823;40;Roth Abschlusswinkelset; ;1;0;ST;955;51;35;00000899;
    [B]B;N;1110000823; ; ; ;0;0;0;4037115021268;RWU00682.tif;3590;0;1; ; ;[/B]
    A;N;1110000824;60;Roth Schraubenset M10; ;1;0;ST;158;51;35;00000900;
    [...]
    
     
  5. #4 Gott_in_schwarz, 25.03.2009
    Zuletzt bearbeitet: 25.03.2009
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Dann gib die Zeile halt immer aus und ändere manchmal die Spalte:
    Code:
    awk -F';' 'BEGIN{OFS=";"} {if ($1 == "A" && $4 == "40")  {$4 = "60"} print $0}'
    edit:
    Zu berücksichtigen wäre der Fall, dass der Output-Field-Seperator nicht gleich dem Input-Field-Seperator ist. (Bei dir ist das nicht der Fall, zumindest hier nicht. Bei dir ist beides ein semicolon.)
    $0 wird nämlich nur "geupdatet" (sprich gesplittet mit IFS und gejoint mit OFS), wenn ein Feld verändert oder ein neues Feld hinzugefügt wurde.
    Falls sich IFS und OFS unterscheiden müsste man dann so einen Hack wie "$1 = $1" o.ä. einfügen damit awk $0 wie intuitiv erwartet updatet.
     
  6. #5 michael77, 25.03.2009
    michael77

    michael77 Jungspund

    Dabei seit:
    18.07.2006
    Beiträge:
    11
    Zustimmungen:
    0
    ehe ich es vergesse:

    Vielen Dank
     
Thema:

Text ersetzen - (schon wieder - ich weiß)

Die Seite wird geladen...

Text ersetzen - (schon wieder - ich weiß) - Ähnliche Themen

  1. Unterschiedlichen Text in mehrere Dateien finden und löschen / ersetzen

    Unterschiedlichen Text in mehrere Dateien finden und löschen / ersetzen: Moin erstmal, ich suche nach einer Möglichkeit, in mehreren unterschiedlichen Dateien Text mit folgendem Muster zu suchen und zu löschen oder...
  2. Bash-Skript Text suchen und ersetzen mit unterschiedlichen Trennzeichen

    Bash-Skript Text suchen und ersetzen mit unterschiedlichen Trennzeichen: Hallo zusammen, ich habe bereits diverse Google-Suchergebnisse durchforstet, habe jedoch nirgendwo eine verwertbare Lösung für mein Anliegen...
  3. Suchen und ersetzen in einer Textdatei

    Suchen und ersetzen in einer Textdatei: Hallo, unter Umständen nochmal fast das ganze. Also, ich habe ein Problem. Möglicherweise habe ich das nur überlesen, allerdings habe ich heute...
  4. Platzhalter in Textdatei durch den Inhalt einer anderen Datei ersetzen

    Platzhalter in Textdatei durch den Inhalt einer anderen Datei ersetzen: Hallo, gibt es ein Kommando, mit dem ich einen Platzhalter in einer Textdatei durch den kompletten Inhalt einer anderen Textdatei ersetzen kann?...
  5. mehrzeiligen Text per Skript ersetzen

    mehrzeiligen Text per Skript ersetzen: //ERLEDIGT !!! Hallo Ihr alle, ich habe hier ein kleines Problemchen mit dem ersetzen von mehrzeiligem Text per Skript. was ich machen...