Wertebereich ersetzen mit sed

E

elyps

Hallo Forenmitglieder,

ich habe ein kleines Problem mit sed und zwar möchte ich in einer Datei mit mehren Spalten und Zeilen das Vorkommen eines bestimmten Wertebereiches mit Nullen ersetzen. Eigentlich müsste das mit sed doch relativ einfach gehen; mein bisheriger Versuch führt leider nicht zum Erfolg... es tut sich gar nichts:

MAX50=`cat max50.txt`
MAXRESULT=`cat max-result.txt`
sed -i "s/$MAX50/0/g;s/$MAXRESULT/0/g" differenz2.txt

Die Anfangs- und Endwerte des Wertebereiches sind in den Textdateien max50.txt und min50.txt enthalten und laut Doku sollte der Aufruf mit sed und doppelten Anführungszeichen "s/.../g" klappen.

Welchen "dummen" Fehler mache ich?

Vielen Dank,
Marcus
 
Zuletzt bearbeitet von einem Moderator:
Nur mal so gefragt: hast Du Dir schon mal den Inhalt der Variable MAX50 und MAXRESULT angeschaut?

Oder - direkter - Dich damit beschäftigt, wie man einer Variablen den Inhalt einer Datei zuweist?

Ob's dann klappt müsste man probieren, bei sed sind Variablen als Suchpattern nicht völlig trivial, aber da kann man sich entsprechend was ergooglen (hängt hauptsächlich vom Inhalt der Variablen ab).
 
Ähm... Ich hatte so vieles ausprobiert, dass ich mich bei der Definition der Variablen verrannt hatte. Da hast Du natürlich recht, so _kann_ es nicht klappen.

Dennoch ist der Aufruf von Variablen in SED (für mich) ziemlich umständlich. Ich habe es jetzt mit einer Schleife in AWK umgesetzt und das klappt einwandfrei; es werden alle Werte unter einem bestimmten Grenzwert auf Null gesetzt:

awk -v var="$MAX50" 'BEGIN { FS = OFS = "\t" } { for(i=1; i<=NF; i++) if($i<var) $i = 0 }; 1' differenz.txt

Danke für Deinen Hinweis!
 
mit sed hat es bei mir immer funktioniert, wenn ich die ' gelassen habe und die Variablen in '"$variable"' gesetzt habe
 

Ähnliche Themen

suchen und ersetzen, Format erhalten

Textdatei manipulieren mittels sed

sed, leerzeichen durch komma ersetzen

mit SED aus einer unbekannten Textdatei die erste gefundene IP ausgeben

Mysql connect Problem

Zurück
Oben