[sed] of [grep] tekstbestand aanpassen / tabel extracten

Pagina: 1
Acties:

  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 21-04 16:15
Ik zit met de volgende situatie:
Ik ben bezig met een grote simulatie in SPICE. Het resultaat schrijft SPICE naar een tekstbestand in de vorm van een tabel. Deze tabel heb ik nodig, maar echt alléén de tabel. Helaas schrijft SPICE er nogal wat extra info bij. Dit wil ik dus weg hebben.

De tekst die SPICE levert, en waar ik alleen de tabel van wil overhouden (de spaties zijn geen probleem):
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
BLA BLA BLA BLA BLA

 ****     TRANSIENT ANALYSIS              


*************************************************



  TIME        V(1)        V(C)        V(R)        

   0.000E+00   0.000E+00   0.000E+00   0.000E+00
   1.000E-17   5.001E-04   5.001E-04   5.001E-04
   2.000E-17   1.500E-03   1.500E-03   1.500E-03
   3.000E-17   2.500E-03   2.500E-03   2.500E-03
   4.000E-17   3.500E-03   3.500E-03   3.500E-03
   1.980E-15   1.975E-01   1.975E-01   1.975E-01
   1.990E-15   1.985E-01   1.985E-01   1.985E-01
   2.000E-15   1.995E-01   1.995E-01   1.995E-01


          JOB CONCLUDED

          TOTAL JOB TIME             .05


Ik heb op internet gezocht naar tools die dit zouden moeten kunnen, en toen kwam ik uit bij grep of sed. Van beide programma's heb ik een "for Windows" versie kunnen vinden :)
Het is namelijk de bedoeling dat SPICE vanuit batch mode wordt gestart, alles gaat simuleren, de output daarvan wordt aangepast en dat gaat door naar MATLAB. Ik wil dit dus allemaal in een simpel *.bat bestandje gaan zetten om de hele zaak min of meer te automatiseren.

Tot zover de achtergrond van het probleem.
Ik wil dus die tabel overhouden, maar hoe krijg ik grep of sed zo ver dat ie alles behalve de tabel weghaald? Ik heb de complete commando-lijst opgezocht, maar de mogelijkheden zijn zo divers dat ik door de bomen het bos niet meer zie :/

All electric components run on smoke. If you let the smoke out, they won't work anymore.


  • elTigro
  • Registratie: November 2000
  • Laatst online: 20-02 06:15

elTigro

Es un Gringo!

als beginnetje,

type autoexec.bat (ofzo) | grep -v '[A-DF-Z]' hou je alleen nog je numerieke zooi over (en lijnen die alleen uit E'en bestaan )

[ Voor 15% gewijzigd door elTigro op 21-10-2005 10:59 . Reden: even iets anders na testen ]

Lazlo's Chinese Relativity Axiom:No matter how great your triumphs or how tragic your defeats --approximately one billion Chinese couldn't care less.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Gewoon een simpele regexp opzetten. Ongetest:
^(\s*([0-9]+\.[0-9]+E[+-][0-9]+)){4}$

Zo zou je alle regels apart moeten krijgen, met alle getallen in een eigen groep.

[ Voor 40% gewijzigd door NMe op 20-10-2005 16:25 ]

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 21-04 16:15
@ -NMe-

Ik neem aan dat bovenstaand commando voor grep bedoeld is? Wanneer ik hem met grep uitvoer (grep -v ........), dan print ie mijn volledige tekstbestand en meer niet... Ik houd dus gewoon mn ongewijzigde bestand over...

(sorry hoor, ik ben totaal niet bekend met command-lines :S )

All electric components run on smoke. If you let the smoke out, they won't work anymore.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

Die regular expression heb ik hier even getest, en hij werkt gewoon (althans, in PHP; ik heb geen grep tot mijn beschikking).

Sowieso moet je hier niet grep -v gebruiken, want dan pak je alle regels behalve die wat je hebben moet. Probeer mijn regexp eens zonder die ^ aan het begin en die $ aan het eind?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 21-04 16:15
Werkdag was afgelopen en kon thuis niet testen, maar hier zijn we weer :)

Ik heb nu de volgende mogelijkheden geprobeerd:
grep ^(\s*([0-9]+\.[0-9]+E[+-][0-9]+)){4}$ spicefile.out
grep (\s*([0-9]+\.[0-9]+E[+-][0-9]+)){4} spicefile.out
grep \s*([0-9]+\.[0-9]+E[+-][0-9]+){4} spicefile.out

Bij alle drie de keren springt mn commandline gewoon een regel verder en gebeurt er dus niets..
Toen ik -v gebruikte, zag ik in ieder geval nog mn complete textfile langs schieten :)

Ik wil dit vraagstuk graag oplossen, dus hebben jullie nog ideeën?

P.S. de versie van grep die ik gebruik: grep for windows (freeware)

All electric components run on smoke. If you let the smoke out, they won't work anymore.


  • elTigro
  • Registratie: November 2000
  • Laatst online: 20-02 06:15

elTigro

Es un Gringo!

probeer het zo maar eens:

cat type bestand | grep '[09]*\.[0-9]*E[+-][0-9]*'

die is ietsje minder restrictief 8)

[ Voor 36% gewijzigd door elTigro op 21-10-2005 10:58 ]

Lazlo's Chinese Relativity Axiom:No matter how great your triumphs or how tragic your defeats --approximately one billion Chinese couldn't care less.


  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 21-04 16:15
Kijk, er gebeurt nu meer! :)

Wanneer ik grep [09]*\.[0-9]*E[+-][0-9]* spicefile.out invoer, krijg ik inderdaad mijn tabel!

Nu nog twee zeer kleine probleempjes:
- de eerste regel van de tabel bevat nu nog de zin "power dissipation 0.00E+00 watts". Die moet er dus nog uit
- Hoe krijg ik grep zover dat ie het resultaat wegschrijft naar een bestand? (mag hetzelfde bestand zijn, hoeft niet).

All electric components run on smoke. If you let the smoke out, they won't work anymore.


  • NMe
  • Registratie: Februari 2004
  • Laatst online: 15-04 22:07

NMe

Quia Ego Sic Dico.

GasNaald schreef op vrijdag 21 oktober 2005 @ 12:15:
Kijk, er gebeurt nu meer! :)

Wanneer ik grep [09]*\.[0-9]*E[+-][0-9]* spicefile.out invoer, krijg ik inderdaad mijn tabel!

Nu nog twee zeer kleine probleempjes:
- de eerste regel van de tabel bevat nu nog de zin "power dissipation 0.00E+00 watts". Die moet er dus nog uit
Die kun je helemaal niet terug krijgen, want je regexp matcht alleen cijfers en een hoofdletter E. :?
- Hoe krijg ik grep zover dat ie het resultaat wegschrijft naar een bestand? (mag hetzelfde bestand zijn, hoeft niet).
Dat is standaard DOS-kennis: http://www.robvanderwoude.com/redirection.html

Die regexp die je nu gebruikt mist nog een - tussen de eerste 0 en 9 trouwens.

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Verwijderd

Het klopt wel dat ie die regel ook terugkrijgt, want grep geeft altijd hele regels terug; als er dan iets in die regel zit dat aan de voorwaarden voldoet, dan kijg je die hele regel... Gebruik anders egrep of grep -e (?)

Oplossing:
code:
1
grep -v power FILE | grep [0-9]*\.[0-9]*E[+-][0-9]*


De eerste grep selecteert alles behalve de zin met power erin.
(getest op Linux)

[ Voor 30% gewijzigd door Verwijderd op 21-10-2005 13:54 ]


  • SnowDude
  • Registratie: Januari 2002
  • Laatst online: 21-04 16:15
Ai... DOS is bij mij toch meer weggezakt dan ik dacht!
Inderdaad, gewoon command > outputfile is voldoende :)

Verder werkt alles nu 100%, thanx allemaal :)

[ Voor 41% gewijzigd door SnowDude op 21-10-2005 14:12 ]

All electric components run on smoke. If you let the smoke out, they won't work anymore.


  • defusion
  • Registratie: Juli 2003
  • Niet online
Verwijderd schreef op vrijdag 21 oktober 2005 @ 12:56:
Het klopt wel dat ie die regel ook terugkrijgt, want grep geeft altijd hele regels terug; als er dan iets in die regel zit dat aan de voorwaarden voldoet, dan kijg je die hele regel... Gebruik anders egrep of grep -e (?)

Oplossing:
code:
1
grep -v power FILE | grep [0-9]*\.[0-9]*E[+-][0-9]*


De eerste grep selecteert alles behalve de zin met power erin.
(getest op Linux)
volgensmij kun je geen pipes gebruiken in dos? kan me vergissen

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 19:06

Creepy

Tactical Espionage Splatterer

defusion schreef op vrijdag 21 oktober 2005 @ 14:41:
[...]

volgensmij kun je geen pipes gebruiken in dos? kan me vergissen
Je vergist je ;)

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney

Pagina: 1