• Sonic
  • Registratie: Februari 2000
  • Laatst online: 22:23
Hallo allemaal,

Ik probeer een filter te maken, maar ik kom er niet helemaal uit.
Het volgende probeer ik te realiseren:

- Log bestand lezen
- Errors, warnings etc naar een ander bestand schrjiven
- Filter bestand inlezen en filteren welke errors of warnings overgeslagen mogen worden.

In het script maak ik op deze manier een nieuw bestand aan:
cat $LogFile | grep -i error: > la_result.txt
cat $LogFile | grep -i warning >> la_result.txt
cat $LogFile | grep -i invalid >> la_result.txt
cat $LogFile | grep -i uninitialized >> la_result.txt

In het bestand la_result.txt staan nu de regels van de errors, warnings etc. In een apart bestand wil ik de uitzonderingen meegeven.

Een uitzondering ziet er bijvoorbeeld zo uit:
'/WARNING: Compression was disabled for data set/d'
'/WARNING: XML is experimental in this release/d'

Nu wil ik met een loop het bestand la_result.txt uitlezen en de filter toepassen. Wat er overblijft mag naar een nieuw bestand worden geschreven.

Ik heb het volgende script gebruikt, maar dit werkt helaas niet.
for LINE in $(cat la_result.txt)
do
cat $LINE | sed -e $FilterExec >> test_eind.log
done

Misschien dat iemand mij opweg kan helpen? :)

  • Wolfboy
  • Registratie: Januari 2001
  • Niet online

Wolfboy

ubi dubium ibi libertas

Gewoon de inverse pakken lijkt mij het makkelijkst hierbij :)

cat $LogFile | grep -viE '(error|warning|invalid|uninitialized):' > test_eind.log

Blog [Stackoverflow] [LinkedIn]


  • sparks
  • Registratie: December 2002
  • Laatst online: 07:52
Los van mogelijke optimalisaties:

je kunt de -f optie aan sed meegeven, achter -f zet je de naam van je file waarin je sed commando's voorkomen.

Optimalisaties:

Voer de grep met een -E uit: (expressies), je hoeft dan maar in 1 keer door je logfile heen, pipe de output door naar sed (met -f) en je hebt in 1 commando regel je resultaat.

Succes,

  • Sonic
  • Registratie: Februari 2000
  • Laatst online: 22:23
Bedankt voor jullie hulp! Volgens mij heb ik hem bijna :)

Ik maak het volgende bestand aan:
cat $LogFile | grep -iE "(error|warning|invalid|uninitialized)" > la_result.txt

In dit bestand staat de volgende regel:
Warning Period: 31 days (ending 03MAR2010).

Nu wil ik de "filter" eroverheen gooien met de volgende for loop:
for LINE in $(cat la_result.txt)
do
cat $LINE | sed -ef $FilterExec >> test_eind.log
done

In het $FilterExec bestand staat het volgende:
'/WARNING: Compression was disabled for data set/d'
'/WARNING: XML is experimental in this release/d'
'/%PUT ERROR: READINTF - Error reading metadata;/d'
'/LN005408 23FEB2005 ESE Verbeterslag: errorafhandeling en/d'
'/WARNING: Only Base procedures and SAS/d'
'/NOTE: Invalid arguments to the YEAR/d'
'/NOTE: Invalid arguments to the MONTH/d'

De melding "Warning Period: 31 days (ending 03MAR2010)" komt niet in het filter bestand voor en zou daarom weergegeven moeten worden in test_eind.log. Dit bestand is nu alleen leeg...

  • jschot
  • Registratie: Oktober 2002
  • Laatst online: 09-07-2025
Sonic schreef op donderdag 14 mei 2009 @ 14:23:
...
cat $LINE | sed -ef $FilterExec >> test_eind.log
done
...
Volgens mij bedoel je echo ipv cat.

Ikzelf zou grep ipv sed gebruiken. Je krijgt dan zoiets:
code:
1
2
3
grep -iE "(error|warning|invalid|uninitialized)" $LogFile \
    | grep -vf $FilterFile \
    >> test_eind.log

  • Kees
  • Registratie: Juni 1999
  • Laatst online: 27-01 18:27

Kees

Serveradmin / BOFH / DoC
Je zou het ook zo kunnen doen?

grep -iE "(error|warning|invalid|uninitialized)" $LogFile > la_result.txt

In het $FilterExec bestand staat het volgende:
WARNING: Compression was disabled for data set
WARNING: XML is experimental in this release
%PUT ERROR: READINTF - Error reading metadata;
LN005408 23FEB2005 ESE Verbeterslag: errorafhandeling en
WARNING: Only Base procedures and SAS
NOTE: Invalid arguments to the YEAR
NOTE: Invalid arguments to the MONTH

grep -Ef $FilterExec la_result.txt > test_eind.log

Ik zie dat je overigens ook 'cat' redelijk veel misbruikt; het is niet nodig, zorgt ervoor dat je een extra process spawned en vrijwel elk commando kan ook gewoon uit een file lezen ;)

[ Voor 14% gewijzigd door Kees op 14-05-2009 15:19 ]

"Een serveradmin, voluit een serveradministrator, is dan weer een slavenbeheerder oftewel een slavendrijver" - Rataplan

Pagina: 1