awk : Zeile suchen und ende ersetzen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
nihilist
Beiträge: 430
Registriert: 27.04.2006 21:17:06
Kontaktdaten:

awk : Zeile suchen und ende ersetzen

Beitrag von nihilist » 29.09.2011 17:52:46

Hi,

Ich möchste eine textdatei durchsuchen und bei einer bestimmten Zeile die letzte Spalte ersetzen

Beispiel

Code: Alles auswählen

host;ii;foo;description;0
Ich dachte mit

Code: Alles auswählen

awk -F ';'  '/foo/ sub ("0","1", $NF)'
liese sich

Code: Alles auswählen

host;ii;foo;description;1
erreichen, aber stattdessen wird in allen Zeilen die letzte Spalte umgeschrieben.
Ausserdem verschwinden meine tollen ";" zwischen den Spalten.
Wo liegt mein Fehler?

nihilist
Beiträge: 430
Registriert: 27.04.2006 21:17:06
Kontaktdaten:

Re: awk : Zeile suchen und ende ersetzen

Beitrag von nihilist » 29.09.2011 18:24:33

Ach, warum nicht so:

Code: Alles auswählen

 sed '/foo/s/0/1/g'
:)


Edit:
Auch wenn ich mein "Problem" jetzt auf andere Art gelöst habe, wäre ich doch an einer Lösung mit awk interessiert...

Benutzeravatar
Meillo
Moderator
Beiträge: 9241
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: awk : Zeile suchen und ende ersetzen

Beitrag von Meillo » 29.09.2011 20:31:26

nihilist hat geschrieben: Ich dachte mit

Code: Alles auswählen

awk -F ';'  '/foo/ sub ("0","1", $NF)'
liese sich

Code: Alles auswählen

host;ii;foo;description;1
erreichen, aber stattdessen wird in allen Zeilen die letzte Spalte umgeschrieben.
Ausserdem verschwinden meine tollen ";" zwischen den Spalten.
Wo liegt mein Fehler?
Du hast die geschweiften Klammern fuer den Block vergessen:

Code: Alles auswählen

awk -F';' '/foo/ {sub("0", "1", $NF)}'
Dein Code enthaelt zwei Blocks: Der erste sucht nach /foo/ und printed die Zeile (= default action); der zweite Block ersetzt in jeder Zeile 0 mit 1 im letzten Feld.

nihilist hat geschrieben:Ach, warum nicht so:

Code: Alles auswählen

 sed '/foo/s/0/1/g'
Korrekterweise so:

Code: Alles auswählen

 sed '/foo/s/;0$/1/'
Use ed once in a while!

nihilist
Beiträge: 430
Registriert: 27.04.2006 21:17:06
Kontaktdaten:

Re: awk : Zeile suchen und ende ersetzen

Beitrag von nihilist » 29.09.2011 21:21:07

wieder einmal:
Dankeschön :THX:

Antworten