PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : an bestimmte Zeile anfuegen mit sed/awk



kamome
05-03-2004, 12:03
Hi alle zusammen,

ich will in einer dreispaltigen Datei an bestimmte Zeilen eine vierte Spalte anhaengen:

sed -n "10929p" tstdat |awk '{ print " "$1" "$2" "$3" grow" }'
6.62500 53.87500 22.09 grow
haengt also an die Ausgabe der 10929sten Zeile der Datei tstdat ein " grow" als vierte Spalte an; ich brauche diese neue vierspaltige Zeile aber wieder in der Datei tstdat selbst (wieder als 10929ste Zeile).
Ausserdem muss ich statt des "grow"s auch Variablen aus meinem aufrufenden script benutzen - die verliere ich aber durch die pipe, oder?
Hat jemand dafuer Loesungen? Vielleicht geht das auch nur mit sed (dann ohne pipe), bisherige Versuche in dieser Richtung waren allerdings auch erfolglos:

sed -n "10929p" tstdat |sed 's/*/& grow/'
6.62500 53.87500 22.09

- keine vierte Spalte.

//edit
mit sed -e vielleicht?

sed -e s/alt/neu/ tstsed > tstsed.neu
mv tstsed.neu tstsed
aber wie haenge ich dann eine vierte Spalte an die Zeile an und wie baue ich das 'sed -n "10929p" tstdat' ein?
\\edit

Auch mit pipen durch tee habe ich schon etwas (erfolglos) versucht.

Wie stelle ich das ganze denn richtig an?

Vielen Dank fuer jegliche Loesungsansaetze

cu
kamome

peschmae
05-03-2004, 13:14
Ich versteh das ganze nicht ganz. Habe aber das Gefühl dass du noch recht viele Sachen ein bisschen falsch machst

1) * bei Sed bedeuted 0 bis unendlich mal das vorherige Zeichen - in diesem Falle gibts aber kein vorheriges Zeichen
2) sed -e (afair) editiert direkt in der Datei - die Pipe und das mv anschliessend sollten also nicht nötig sein.

Vielleicht noch n paar Details zur Aufgabenstellung?
"neue Spalte" - wie ist das zu verstehen? einfach ein paar leerzeichen und dann "grow" oder nen tab oder was?

MfG Peschmä

systemdefender
05-03-2004, 14:21
ich will in einer dreispaltigen Datei an bestimmte Zeilen eine vierte Spalte anhaengen:
an welche "bestimmten Zeilen"? welches kreterium? oder sind dir die zeilennummer schon bekannt, weil du sie in deinem befehl angibst und
... (wieder als 10929ste Zeile) ... sagst?

hast bei diesem ...

... |sed 's/*/& grow/' ... auch den punkt vergessen ...
echo "111 222 333"|sed 's#.*#& test#'

gruss, sd.

peschmae
05-03-2004, 15:29
ah, vielleicht versteh ichs. Du möchtest auf einer bestimmten Zeile etwas anhängen?

Dann so:


ZEILE=3
sed -i "$ZEILE s/.*/& grow/" file.txt


-i macht das was ich meinte -e würde - direkt in der Datei bearbeiten.

MfG Peschmä

kamome
05-03-2004, 16:00
Danke Euch, Ihr seid super :)

>Habe aber das Gef?l dass du noch recht viele Sachen ein bisschen falsch machst

Deshalb frage ich ja ;) ich habe mir die Sachen halt fleissig zusammengesucht und sie dann nicht richtig zusammenbekommen - haette halt auch in der manpage weiter als bis -e lesen sollen :D Wenn ich mich nicht deutlich genug ausgedrueckt hatte, tut mir das Leid, aber mit

ZEILE=3
sed -i "$ZEILE s/.*/& grow/" file.txt

hast Du, peschmae, mein Problem zu 100% erkannt und geloest :)

Habt vielen Dank

cu
kamome

peschmae
05-03-2004, 17:43
Bitte gern geschehen.

Dein Text war ein bisschen lang - das Betreff sagt eigentlich schon alles. Die Erläuterungen haben ein bisschen verwirrt. :)

MfG Peschmä