Gentoo Forums
Gentoo Forums
Gentoo Forums
Quick Search: in
sed / awk frage:
View unanswered posts
View posts from last 24 hours
View posts from last 7 days

 
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German)
View previous topic :: View next topic  
Author Message
schrippe
Guru
Guru


Joined: 03 Mar 2004
Posts: 556
Location: Mülheim

PostPosted: Tue Aug 30, 2005 9:10 am    Post subject: sed / awk frage: Reply with quote

hallo,

an alle die besser awk können:

ich müsste aus dieser zeile (ist nen file mit insgesamt 5000 Zeilen)
Code:
Thu Aug 25 13:06:40 2005        1124968000006939        1       140     141     4


von dem string 1124968000006939 die letzten 6 Ziffern ausschneiden. der rest des file soll so bleiben.

danke
_________________
for i in $(seq 1 565); do echo 'A$i: entweder rechts fahren oder rechts überholen dürfen!';done
Back to top
View user's profile Send private message
Earthwings
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 7753
Location: Germany

PostPosted: Tue Aug 30, 2005 10:10 am    Post subject: Reply with quote

Ausschneiden == entfernen?
Das ginge zum Beispiel folgendermaßen, falls der String immer 16 Zahlen enthält.
Code:
sed "s/\([0-9]\{10\}\)[0-9]\{6\}/\1/" <datei>
Oder auch
Code:
sed "s/[0-9]\{6\} / /" <datei>
Das dürfte etwas schneller sein, musst aber evtl. statt dem Leerzeichen die Whitespace-Klasse nehmen.
_________________
KDE
Back to top
View user's profile Send private message
pablo_supertux
Advocate
Advocate


Joined: 25 Jan 2004
Posts: 2953
Location: Somewhere between reality and Middle-Earth and in Freiburg (Germany)

PostPosted: Tue Aug 30, 2005 10:29 am    Post subject: Reply with quote

Wenn du mit awk arbeiten willst, dann kannst du das hier versuchen:
Code:

supertux@supertux:~> cat file.dat
Thu Aug 25 13:06:40 2005        1124968000006939        1       140     141     4
supertux@supertux:~> cat file.dat | awk '{string=$6; \
> len=length(string);
> nums = substr(string,0,len-6);
> for(i=1; i<NF; i++)
>     if(i==6)
>        printf("%s\t", nums);
>     else
>        printf("%s\t", $i);
> printf("\n"); }'
Thu     Aug     25      13:06:40        2005    1124968000      1       140     141

_________________
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!
Back to top
View user's profile Send private message
schrippe
Guru
Guru


Joined: 03 Mar 2004
Posts: 556
Location: Mülheim

PostPosted: Tue Aug 30, 2005 11:17 am    Post subject: Reply with quote

das sed sieht sehr gut aus.
schei* reguläre ausdrücke. kapiere die einfach nicht.

sed "s/\([0-9]\{10\}\)[0-9]\{6\}/\1/" gnu_apache2.file

wenn es nicht zuviel arbeit ist:?
was machen denn die einzelnen abschnitte?
_________________
for i in $(seq 1 565); do echo 'A$i: entweder rechts fahren oder rechts überholen dürfen!';done
Back to top
View user's profile Send private message
Earthwings
Bodhisattva
Bodhisattva


Joined: 14 Apr 2003
Posts: 7753
Location: Germany

PostPosted: Tue Aug 30, 2005 11:55 am    Post subject: Reply with quote

schrippe wrote:
das sed sieht sehr gut aus.
schei* reguläre ausdrücke. kapiere die einfach nicht.

sed "s/\([0-9]\{10\}\)[0-9]\{6\}/\1/" gnu_apache2.file

wenn es nicht zuviel arbeit ist:?
was machen denn die einzelnen abschnitte?

Ist gar nicht so schwer zu verstehen, man darf sich nur nicht durch die vielen Klammern und Escapes verwirren lassen. Grundsätzlich ist die Syntax beim Ersetzen mit sed s/<regulärer Ausdruck>/<Ersatz>/<modifier>
[0-9] matcht alle einstelligen Zahlen von 0-9, also zB 3 oder 6.
{x,y} gibt an, das die vorangehenden Zeichen mindestens x und höchstens y mal vorkommen dürfen.
{x} ist kurz für {x,x}
[0-9]{10} trifft also auf alle zehnstelligen Zahlen zu.
Mit den Klammern darum ([0-9]{10}) wird sed angewiesen, den Inhalt des zutreffenden Strings zu speichern, so dass du ihn bei <Ersatz> mit \1 benutzen kannst.
([0-9]{10})[0-9]{6} weist somit sed an, eine zehnstellige Zahl direkt gefolgt von einer sechsstelligen Zahl zu suchen, und die zehnstellige Zahl in \1 zu speichern.
_________________
KDE
Back to top
View user's profile Send private message
return13
Guru
Guru


Joined: 02 Feb 2004
Posts: 513
Location: Hamburg - Germany

PostPosted: Tue Aug 30, 2005 1:57 pm    Post subject: Reply with quote

nicht schlecht... hättest nicht lust hier ein kleines oder vielleicht auch etwas umfangreicheres sed|awk howto zu schreiben?
Will es zwar lernen, hab aber keine lust mir ein 600 seitigen Wälzer durchzulesen... deine Anleitung war kurz und verständlich...
_________________
Wer Recht erkennen will, muß zuvor in richtiger Weise gezweifelt haben.
Aristoteles (384-322), griech. Philosoph, Begründer d. abendländ. Philosophie
Back to top
View user's profile Send private message
Anarcho
Advocate
Advocate


Joined: 06 Jun 2004
Posts: 2970
Location: Germany

PostPosted: Tue Aug 30, 2005 2:12 pm    Post subject: Reply with quote

Warum das Rad jedesmal neu erfinden, HowTos gibt es doch wie Sand am Meer:

http://www.regular-expressions.info/ (scheint sehr gut zu sein)

http://www.amk.ca/python/howto/regex/

http://gnosis.cx/publish/programming/regular_expressions.html

http://virtual.park.uga.edu/humcomp/perl/regex2a.html
_________________
...it's only Rock'n'Roll, but I like it!
Back to top
View user's profile Send private message
return13
Guru
Guru


Joined: 02 Feb 2004
Posts: 513
Location: Hamburg - Germany

PostPosted: Tue Aug 30, 2005 8:51 pm    Post subject: Reply with quote

danke
_________________
Wer Recht erkennen will, muß zuvor in richtiger Weise gezweifelt haben.
Aristoteles (384-322), griech. Philosoph, Begründer d. abendländ. Philosophie
Back to top
View user's profile Send private message
Display posts from previous:   
Reply to topic    Gentoo Forums Forum Index Deutsches Forum (German) All times are GMT
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum