[shell script] expressie wil niet

Pagina: 1
Acties:
  • 216 views sinds 30-01-2008
  • Reageer

  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
Ik probeer via een simpel shell script het volgende:
1) open bestand (korte strings, gescheiden door |)
2) als het 7e stuk tekst gelijk is aan 03, plak het dan aan een bestand

Tot nu toe ben ik hier gekomen:
code:
1
2
3
4
5
6
for REGEL in `cat bronbestand`        
  do                                      
   if ( $REGEL | cut -d"|" -f7 == 03) then
      echo $REGEL                         
    fi                                    
done


maar als ik dit vanaf de prompt test, komen regels als hieronder voorbij scrollen:
code:
1
2
3
4
5
6
./test: 002: command not found                                
cut: 0653-132 Cannot open ==.                                 
cut: 0653-132 Cannot open 03.                                 
cut: 0653-132 Cannot open ==.                                 
cut: 0653-132 Cannot open 03.                                 
./test: 08|0488|0181|70|200403170856|10|01|000041+|000000050+|


als ik gewoon vanaf de prompt onderstaande doe, krijg ik netjes de mogelijke output van kolom 7:

cat bronbestand | cut -d"|" -f7

Wie kan mij op weg helpen?

ach...in een volgend leven lach je er om!


  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Sorry, zie idd nog een foutje...
code:
1
2
3
4
5
6
7
for REGEL in `cat bronbestand`
do
        tmp="`echo $REGEL | cut -d"|" -f7`"
        if [ "03" = "$tmp" ] ; then
                echo $REGEL
        fi
done

foutje gefixed....

[ Voor 50% gewijzigd door 0528973 op 18-03-2004 15:48 ]

Pascal


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
0528973 schreef op 18 maart 2004 @ 15:39:
<knip mogelijke oplossing</knip>
output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
./test: 002: command not found
./test: 01: command not found 
./test: 002: command not found
./test: 01: command not found 
./test: 002: command not found
./test: 01: command not found 
./test: 002: command not found
./test: 01: command not found 
./test: 002: command not found
./test: 01: command not found 
./test: 002: command not found
etc...etc...

ach...in een volgend leven lach je er om!


  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
Zoals je in mijn eerdere post kan zien is het foutje gefixed...

Misschien een volgende keer ff op google iets als:
linux: bash if intikken

http://www.newbie.org/snippets/shell/content/scripts2.html

Dit had je makkelijk binnen 10 minuten met google op kunnen lossen, vandaar mijn opmerking.

[ Voor 20% gewijzigd door 0528973 op 18-03-2004 15:50 ]

Pascal


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
0528973 schreef op 18 maart 2004 @ 15:49:
Zoals je in mijn eerdere post kan zien is het foutje gefixed...
Misschien een volgende keer ff op google iets als:
linux: bash if intikken
http://www.newbie.org/snippets/shell/content/scripts2.html
Dit had je makkelijk binnen 10 minuten met google op kunnen lossen, vandaar mijn opmerking.
Hmmz...je paste je post aan nadat ik had gepost dat het niet werkte. (zie tijdstippen). Daarnaast ben ik er al zeker 2 uur mee bezig, het is niet dat ik niet van alles heb geprobeerd van te voren, ben er alleen geen ster in. Daarnaast snap ik nog niet waarom jouw eerste post niet werkte (ik zie al wel waarom mijn oplossing sowieso niet werkte), en dat vind ik eigenlijk nog veel belangrijker dan dat ik over een werkende versie van het scriptje beschik.

Desondanks bedankt, scriptje werkt, is wel tergend langzaam op een bestand van 60.000 regels.

ach...in een volgend leven lach je er om!


  • sebas
  • Registratie: April 2000
  • Laatst online: 16-12-2025
Of gewoon STDERR redirecten naar /dev/null :+

(Sla me maar ;))

Everyone complains of his memory, no one of his judgement.


Verwijderd

Misschien dat dit wat handiger is ;)

code:
1
grep -E "^(\w*\|){6}03\|" bronbestand >> plakbestand


Als er overigens persee een waarde tussen 2 | tekens moet staan, dan wordt het:

code:
1
grep -E "^(\w+\|){6}03\|" bronbestand >> plakbestand


edit:

Zal alleen qua snelheid wat problemen op kunnen leveren als de bestanden al dusdanig groot zijn

[ Voor 71% gewijzigd door Verwijderd op 18-03-2004 16:10 ]


  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
@osiris, mijn scriptje werkte niet vanwege ( ipv [ klein foutje dat ik had moeten voorkomen... als je hier al 2 uur mee bezig bent dan heb je toch wel ergens een BASH manual openstaan?(tenminste dat zou ik wel hebben)

Op 60.000 regels gaat het idd erg traag, misschien dat je er idd een reguliere expressie op los kan laten :) gaat iets sneller... of misschien kan je het ff in een mysql tabel gooien met LOAD DATA IN FILE bla bla bla en dan opgeven dat | de separator is en \n de line ender waarschijnlijk

Pascal


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
0528973 schreef op 18 maart 2004 @ 16:08:
als je hier al 2 uur mee bezig bent dan heb je toch wel ergens een BASH manual openstaan?(tenminste dat zou ik wel hebben)
Heb je gelijk in, maar heb ik niet (behalve man bash dan)
<knip alternatieven</knip>
dit is een scriptje dat ik via de crontab laat lopen, elke dag opnieuw op een bestand dat er op dat moment staat (dus dit script wordt nog veel groter).

Niels Klomp Als ik dat uitvoer wat je schreef, gebeurt er niets... ik keer terug op de prompt, zonder enige output...oh wacht ff...dat gaat niet met de Korn Shell zie ik, met Bash is het scriptje bezig as I speak ;)

[ Voor 9% gewijzigd door 0siris op 18-03-2004 16:16 ]

ach...in een volgend leven lach je er om!


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Je zou ervoor kunnen kiezen om het filteren iets van te voren al plaats te laten vinden:

Huidige code kost op een testbestand (1000 lines)
real 0m6.006s
user 0m1.560s
sys 0m4.440s
code:
1
2
3
4
5
6
7
for REGEL in `grep 03 bronbestand`
do
        tmp="`echo $REGEL | cut -d"|" -f7`"
        if [ "03" = "$tmp" ] ; then
                echo $REGEL
        fi
done

kost
real 0m0.937s
user 0m0.210s
sys 0m0.700s

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

Ik ben ook toevallig aan het scripten. mag ik je de volgende howto aanbevelen:
http://www.tldp.org/LDP/abs/html/

Erg goede howto.

Verwijderd

0siris schreef op 18 maart 2004 @ 16:12:
[...]
Heb je gelijk in, maar heb ik niet (behalve man bash dan)

[...]

dit is een scriptje dat ik via de crontab laat lopen, elke dag opnieuw op een bestand dat er op dat moment staat (dus dit script wordt nog veel groter).

Niels Klomp Als ik dat uitvoer wat je schreef, gebeurt er niets... ik keer terug op de prompt, zonder enige output ;)
Terwijl het formaat van je data op 1 regel de volgende is?

code:
1
blaat1|blaat2|blaat3|blaat4|blaat5|blaat6|03|doet er verder niet meer toe

Zo ja, dan zou het erg vreemd zijn dat het niet werkt :P

Stomme vraag misschien hoor, maar ik neem aan dat je wel in "plakbestand" gekeken hebt :?

  • 0528973
  • Registratie: Juni 2003
  • Laatst online: 15-05-2013
@osiris, wat niels klomp als example gaf geeft ook geen output...
behalve als je >> plakbestand weghaalt....

Het idee om van te voren idd data te filteren met bijv. grep is erg nuttig zoals je kan zien in de post van spider :)

Pascal


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 18 maart 2004 @ 16:05:
Misschien dat dit wat handiger is ;)

code:
1
grep -E "^(\w*\|){6}03\|" bronbestand >> plakbestand


Als er overigens persee een waarde tussen 2 | tekens moet staan, dan wordt het:

code:
1
grep -E "^(\w+\|){6}03\|" bronbestand >> plakbestand


edit:
Zal alleen qua snelheid wat problemen op kunnen leveren als de bestanden al dusdanig groot zijn
Ik was 10 minuten bezig met het maken van een goede testfile :o

Anyway.. die van jou is idd nog sneller:
real 0m0.006s
user 0m0.000s
sys 0m0.010s
:D

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
Spider.007 schreef op 18 maart 2004 @ 16:14:
Je zou ervoor kunnen kiezen om het filteren iets van te voren al plaats te laten vinden
Da's inderdaad een goed idee, ik kan alvast een grep doen op "|03|", dat komt zeker niet zo heel vaak voor. Thanks!
@balou: ook bedankt!

ach...in een volgend leven lach je er om!


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 18 maart 2004 @ 16:05:
Misschien dat dit wat handiger is ;)

[...]

edit:
Zal alleen qua snelheid wat problemen op kunnen leveren als de bestanden al dusdanig groot zijn
mwah
code:
1
2
3
4
5
6
7
8
9
 wc -l bronbestand
5333111 bronbestand
 time grep -E "^(\w+\|){6}03\|" bronbestand
a|b|c|d|e|f|03|h|
a|b|c|d|e|f|03|h|

real    0m3.480s
user    0m1.110s
sys     0m1.530s
:D

0siris schreef op 18 maart 2004 @ 16:19:
[...]

Da's inderdaad een goed idee, ik kan alvast een grep doen op "|03|", dat komt zeker niet zo heel vaak voor. Thanks!
@balou: ook bedankt!
Niels Klomp heeft nog even bewezen dat je dit soort zaken beter aan de dedicated tools over kan laten; zie ook de tijden in mijn vorige post :)

[ Voor 39% gewijzigd door Spider.007 op 18-03-2004 16:26 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

Heb voor de gein ook maar even een benchmark gedaan (heb niks beters te doen op het moment :+ ;) )
Aantal regels:
code:
1
2
niels@warp tmp $ wc -l bronbestand
57921 bronbestand


Origineel script:
code:
1
2
3
4
5
time ./testrun.orig
 
real    2m22.318s
user    0m35.793s
sys     1m23.129s


Grep filter (Spider.007):
code:
1
2
3
4
5
time ./testrun.spider
 
real    0m35.524s
user    0m10.184s
sys     0m16.918s


Grep regex:
code:
1
2
3
4
5
time ./testrun.regex
 
real    0m0.070s
user    0m0.023s
sys     0m0.011s


Mjah verschil is marginaal :+ :P

  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
OK,
code:
1
grep -E "^(\w+\|){6}03\|"  bronbestand
doet niets (dus ook niet als ik >> outputbestand weglaat). Ik keer meteen terug op de prompt.

Niet in AIX (grep --version werkt niet)
en niet in Debian:
osiris@rammelbak:~/scripts$ grep --version
grep (GNU grep) 2.4.2

Ik snap ondertussen een heel eind wat het moet doen (damn wat is zo'n oplossing klein, wel gaaf dat je zo lang kan denken over zoiets kleins :P )

[ Voor 22% gewijzigd door 0siris op 18-03-2004 16:44 ]

ach...in een volgend leven lach je er om!


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

0siris schreef op 18 maart 2004 @ 16:39:
OK,
code:
1
grep -E "^(\w+\|){6}03\|"  bronbestand
doet niets (dus ook niet als ik >> outputbestand weglaat). Ik keer meteen terug op de prompt. Ik snap ondertussen een heel eind wat het moet doen (damn wat is zo'n oplossing klein, wel gaaf dat je zo lang kan denken over zoiets kleins :P )
Post de output van
code:
1
grep --version
eens :?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

Hier staat in een normale omschrijving:

• Begin bij het begin van de regel
• Er moet vanaf dit punt minimaal 1 karakter voorkomen, dat mag bestaan uit zowel kleine als hoofdletters (a t/m z) en cijfers. Het mogen echter meerdere van deze karakters zijn. Dit moet afgesloten worden met een |-teken
• Bovenstaande punt moet in totaal 6 maal voorkomen (direct achter elkaar).
• Nu moet de string 03| volgen.
• De rest van de regel doet er niet meer toe.

En als je weet hoe reguliere expressies werken, dan schud je dit soort eenvoudige varianten daarvan zo uit je mouw ;)

Kortom, je invoerdata voldoet niet aan de regex. Kun je misschien een voorbeeldje geven van je data? :)

[edit]
Ik ben er vanuit gegaan dat het een Linux machine was ;)
Bestaat egrep toevallig op die machine? Zo ja, vervang "grep -E" dan eens door "egrep".

[ Voor 12% gewijzigd door Verwijderd op 18-03-2004 16:49 ]


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
zomaar een regel:
000|000000000+|000|000000000+|000|000000000+|00|00000000000000000000|00000000000000000000|000000000|0|0000|
(waarbij het stukje waar ik naar kijk dus |00| is in dit geval)

ach...in een volgend leven lach je er om!


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 18 maart 2004 @ 16:46:
Hier staat in een normale omschrijving:

• Begin bij het begin van de regel
• Er moet vanaf dit punt minimaal 1 karakter voorkomen, dat mag bestaan uit zowel kleine als hoofdletters (a t/m z) en cijfers. Het mogen echter meerdere van deze karakters zijn. Dit moet afgesloten worden met een |-teken
• Bovenstaande punt moet in totaal 6 maal voorkomen.
• Nu moet de string 03| volgen
• De rest van de regel doet er niet meer toe.

En als je weet hoe reguliere expressies werken, dan schud je dit soort eenvoudige varianten daarvan zo uit je mouw ;)

Kortom, je invoerdata voldoet niet aan de regex. Kun je misschien een voorbeeldje geven van je data? :)
Waarom niet
code:
1
grep -E "^(.+\|){6}03\|"  bronbestand
? Zou toch ook goed moeten gaan?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

Spider.007 schreef op 18 maart 2004 @ 16:50:
[...]


Waarom niet
code:
1
grep -E "^(.+\|){6}03\|"  bronbestand
? Zou toch ook goed moeten gaan?
Jawel hoor, dat werkt perfect :)

Persoonlijk ben ik alleen van mening dat als je toch een regex gebruikt, je die ook meteen de rest van de data mag laten valideren.
edit:
Wat bijvoorbeeld als je invoerdata per ongeluk verkeerd gegenereerd is door een externe factor, maar er komt toch een 03 op de juiste plaats. Waarom die data vertrouwen als je de data toch al middels een regex aan het bewerken bent.


Elke regex waarbij minimaal 1 maal elk karakter voor mag komen voor de | of waarbij minimaal 1 maal een niet | karakter gevolgd door de | voorkomt (en dat 6 maal) is goed.


0siris als de data altijd dergelijke vormen heeft, dan kan je de volgende oplossing gebruiken:
code:
1
grep -E "^((\w|\+)+\|){6}03\|" bronbestand

of als de + alleen voor de | voor kan komen bijvoorbeeld:
code:
1
grep -E "^((\w)+\+*\|){6}03\|" bronbestand

Als je geen rekening wil houden met de data voorafgaand aan de |03|, dan kun je uiteraard de oplossing van Spider.007 nemen. :)

[ Voor 17% gewijzigd door Verwijderd op 18-03-2004 17:08 ]


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
nog een leuk verschijnsel: Het bronbestand is 56442 regels lang,

Linux:
code:
1
2
3
4
time grep -E "^(.+\|){6}03\|" bronbestand
real    0m0.162s
user    0m0.120s
sys     0m0.030s

(celeron 1300 Mhz)

AIX (waar het uiteindelijk op komt te draaien) is nu al 7 minuten bezig, ik schat dat-ie er een half uur over gaat doen (!) (dat is een leuke Dual CPU P630 zou je zeggen....

ach...in een volgend leven lach je er om!


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

0siris schreef op 18 maart 2004 @ 17:22:
nog een leuk verschijnsel: Het bronbestand is 56442 regels lang,

Linux:
code:
1
2
3
4
time grep -E "^(.+\|){6}03\|" bronbestand
real    0m0.162s
user    0m0.120s
sys     0m0.030s

(celeron 1300 Mhz)

AIX (waar het uiteindelijk op komt te draaien) is nu al 7 minuten bezig, ik schat dat-ie er een half uur over gaat doen (!) (dat is een leuke Dual CPU P630 zou je zeggen....
Probeer het commando `egrep` eens.. deze zou sneller moeten zijn :)

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
Spider.007 schreef op 18 maart 2004 @ 17:26:
Probeer het commando `egrep` eens.. deze zou sneller moeten zijn :)
code:
1
2
3
4
5
>time egrep "^(.+\|){6}03\|" bronbestand
^C
real    0m13.347s
user    0m13.190s
sys     0m0.000s

maar afgebroken....dat ging vast ook erg lang duren ;(

maar hier is de redding:
code:
1
2
3
4
5
6
7
/usr/linux/bin/grep --version
grep (GNU grep) 2.5.1

time /usr/linux/bin/grep -E "^(.+\|){6}03\|" bronbestand
real    0m0.11s
user    0m0.05s
sys     0m0.03s

Hmmmmmmmmm, toch wel wazig dat de ene grep er nu nog steeds mee bezig is (!) en de andere best snel klaar :)

[ Voor 40% gewijzigd door 0siris op 18-03-2004 17:46 ]

ach...in een volgend leven lach je er om!


Verwijderd

Probeer het anders eens op een kleine testfile :)

Het zou kunnen zijn dat egrep onder AIX het herhalen {6} niet ondersteunt.

Je kan dan eventueel het geheel uitschrijven:
code:
1
egrep "^.+\|.+\|.+\|.+\|.+\|.+\|03\|" bronbestand
0siris schreef op 18 maart 2004 @ 17:31:
Hmmmmmmmmm, toch wel wazig dat de ene grep er nu nog steeds mee bezig is (!) en de andere best snel klaar :)
Zo vreemd is dat niet hoor. egrep onder AIX is toch echt een ander programma dan GNU egrep op Linux.

[ Voor 43% gewijzigd door Verwijderd op 18-03-2004 17:49 ]


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
Verwijderd schreef op 18 maart 2004 @ 17:46:
Het zou kunnen zijn dat egrep onder AIX het herhalen {6} niet ondersteunt.
Jawel, het wordt uitgevoerd, grep speelt steeds een regel terug naar de console, het is alleen heel erg lang bezig...

ach...in een volgend leven lach je er om!


Verwijderd

Je kan proberen of sed sneller is:
code:
1
sed -n -r "/^(.*\|){6}03\|.*/p" bronbestand

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Om het topic compleet te maken kun je awk ook meteen proberen:

code:
1
awk -F "|" '{ if ($7=='03') print }' bronbestand
;)



En, nog even voor het idee:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 wc -l bronbestand
  57921 bronbestand

 time sed -n -r "/^(.*\|){6}03\|.*/p" bronbestand

real    0m2.697s
user    0m2.660s
sys     0m0.030s

 time grep -E "^(\w+\|){6}03\|"  bronbestand

real    0m0.036s
user    0m0.020s
sys     0m0.000s

 time awk -F "|" '{ if ($7=='03') print }' bronbestand

real    0m0.392s
user    0m0.380s
sys     0m0.010s

[ Voor 116% gewijzigd door Spider.007 op 18-03-2004 18:46 . Reden: Ja.. ik heb het hele ding herschreven ja O-) ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

Spider.007 schreef op 18 maart 2004 @ 18:15:
Om het topic compleet te maken kun je awk ook meteen proberen:

code:
1
awk -F "|" '/03/ { print $7}' bronbestand
;)
Zonder die $7 dan ;)

sed moet naar mijn mening sneller zijn, maar goed dat is echt geneuzel in de marge ;)

  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 18 maart 2004 @ 18:23:
[...]

Zonder die $7 dan ;)

sed moet naar mijn mening sneller zijn, maar goed dat is echt geneuzel in de marge ;)
Even vergeten dat de TS de complete regel wilde hebben :D Anders heb ik nog wel een snellere versie:
code:
1
echo 03
;) Ik ben trouwens benieuwd of de TS alle bovenstaande sed & awk oplossingen even wil uitproberen op AIX :?

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


Verwijderd

:D Gehehe
Sowieso houd die awk oplossing geen rekening met de plaats van |03| :)

edit:

Hoe kan je een topic vullen over het cijfer 03 :P

[ Voor 31% gewijzigd door Verwijderd op 18-03-2004 18:27 ]


  • Spider.007
  • Registratie: December 2000
  • Niet online

Spider.007

* Tetragrammaton

Verwijderd schreef op 18 maart 2004 @ 18:27:
:D Gehehe
Sowieso houd die awk oplossing geen rekening met de plaats van |03| :)

edit:
Hoe kan je een topic vullen over het cijfer 03 :P
Ik zag het, hier is de correcte oplossing:
code:
1
awk -F "|" '{ if ($7=='03') print }' bronbestand
:)

[ Voor 7% gewijzigd door Spider.007 op 18-03-2004 18:42 ]

---
Prozium - The great nepenthe. Opiate of our masses. Glue of our great society. Salve and salvation, it has delivered us from pathos, from sorrow, the deepest chasms of melancholy and hate


  • 0siris
  • Registratie: Augustus 2000
  • Laatst online: 21:56
Zucht ;) FREAKS!....om jullie een plezier te doen hier de benches uit AIX:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
time sed -n -r "/^(.*\|){6}03\|.*/p" bronbestand
sed: Not a recognized flag: r

$/usr/linux/bin/sed --version
GNU sed version 4.0.7            

time /usr/linux/bin/sed -n -r "/^(.*\|){6}03\|.*/p" bronbestand
real    0m6.65s
user    0m6.56s
sys     0m0.03s

time awk -F "|" '{ if ($7=='03') print }' bronbestand
real    0m0.61s
user    0m0.58s
sys     0m0.02s

time grep -E "^(\w+\|){6}03\|"  bronbestand
real    0m0.13s
user    0m0.10s
sys     0m0.03s


Tot nu toe is grep -E / egrep (de GNU versie, in mijn geval 2.5.1, dus NIET die standaard in AIX zit!) de snelste...

[ Voor 7% gewijzigd door 0siris op 19-03-2004 15:47 ]

ach...in een volgend leven lach je er om!

Pagina: 1