Variable / Array abschneiden

mehlbox

mehlbox

Eroberer
Hallo zusammen,

habe ein Problem welches ich mal wieder ohne Hilfe nicht behoben bekomme.

Habe in einem Textfile an einer Stelle einen langen String stehen den ich abschneiden möchte und zwar möchte ich den Teil zwischen dem dritten / und dem vierten / haben und wegschreiben und das Teil nach dem vierten /

$9 ist folgendermassen aufgebaut
/bla/blabla/texttexttext/*.txt

Das ganze soll in shell script geschrieben sein.

arbeite mit awk und print $9
wie kann ich denn nun $9 auseinanderpflücken und die einzelnen Teile davon in ergebnis wegschreiben?
cat /var/log/text.txt |grep "Jan *12" |awk '{print $14, $2, $3, $4, $5, $7, $8, $12, $9}' >>/var/log/ergebnis.txt;

Wie muss ich da cut oder awk -f einbauen?

Danke für Eure Hilfe
 
Zuletzt bearbeitet:
Ich würde das einfach zweimal durch awk (oder sed, oder cut) jagen.
Du kannst zum Beispiel erstmal nur das 9. Feld bearbeiten mit awk (einfach nur "print $9" und das dann wieder durch awk jagen mit -F'/').
Das könntest du in einer Variable abspeichern und dann deinen zweiten Durchlauf so ändern: (Variable heißt hier foo)
Code:
grep "Jan *12" /var/log/text.txt | awk '{$9 = "'"$foo"'"; print $14, $2, $3, $4, $5, $7, $8, $12, $9}' >>/var/log/ergebnis.txt
kA, geht betimmt auch einfacher.

edit: oh warte, Schwachfug ^_^
Das würde nur bei einer einzelnen Zeile funktionieren. Du könntest zwar auch mit nem Array arbeiten, aber naja...
Ich würde einfach mit perl arbeiten.
Hier mal beispielhaft:
Code:
echo foo bar 1:2:3 |
perl -anle '$F[2]=(split /:/, $F[2])[1]; print "$F[1] $F[0] $F[2]"'

edit again: in diesem Fall ließe sich das sogar noch kürzer schreiben:
Code:
echo foo bar 1:2:3 |
perl -anle '$F[2]=(split /:/, $F[2])[1]; print "@F[1,0,2]"'
 
Zuletzt bearbeitet:

Ähnliche Themen

Probs mit Perl script

Log filtern summieren mit AWK

Server-Monitoring mit RRDTool

Zurück
Oben