awk / sed

Hoeze

Lieutenant
Registriert
Juni 2010
Beiträge
707
Hi,
ich hab eine Datei und folgende Problemstellung:

Wenn die erste Spalte == xyz ist,
=>Suche nach 'ab' und ersetze durch 'xy'
Dann gib die Zeile aus.

Wie würdet ihr das lösen?
Das Problem ist, dass ich zwar suchen und ersetzen schön machen kann, aber eben nur auf alle Zeilen.
Wenn ich das dann wieder in eine Datei speichere, verschwinden die restlichen Zeilen, bei denen $1 != xyz ist
Am schönsten wärs, wenn awk einfach sed aufruft, falls $1 == xyz
 
Zuletzt bearbeitet:
wenn es egal ist, in welcher spalte "xyz" steht, würde es so gehen:

sed '/xyz/s/ab/xy/'
So ersetzt sed nur in Zeilen, in denen xyz vorkommt.

Und sonst musst du was mit if/else machen. (bash?)
 
Zuletzt bearbeitet:
Das gibt die ausgetauschten Zeilen aus, wobei das "g" alle "ab" in einer zeile mit "xy" austauscht, ohne wird nur das erste vorkommen ausgetauscht.

awk '{if ($1 == "xyz"){ print $0 | "sed s/ab/xy/g"}}'


Folgendes gibt dir die ganze Datei aus,nur in Zeilen mit xyz in der erstem Spalte wird das erste "ab" durch "xy" ausgetauscht.

awk '{if ($1 == "xyz"){ print $0 | "sed s/ab/xy/"} else{print $0}}


Das kannst dann wieder in ne neue Datei umleiten.
 
Zurück
Oben