[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: regelparen verwijderen



Op 2014-03-02 om 13:17 schreef Wouter Verhelst:
> Op zondag 2 maart 2014 12:50:40 schreef Geert Stappers:
> > Hoi,
> > 
> > Een programma verwerkt een lijst.
> > Doet dat goed, de output is minder.
> > 
       <knip/>
> > 
> > Dus dat "kopregels" met "Processing data recordnummer" niet getoond
> > worden als de processing is mislukt. De regels met "Processing failed"
> > zijn ook niet nodig.
> > 
> > Met sed en/of awk krijg ik het niet voormekaar.
> 
> Met awk zou dat toch moeten lukken, en is redelijk simpel:
> 
> commando | awk '
> /Processing data/{
>   header=$0; 
>   header_printed=0;
> }
> /Result/{
>   if(!header_printed) {
>     print header; 
>     header_printed=1;
>   }
>   print $0;
> }'
> 
> Je mag dat eventueel op één lijn zetten, maar zo leest het wat makkelijker.
> 
> Eerste code block wordt uitgevoerd op een lijn 'Processing data', en 
> bewaart die lijn ("$0") in de variabele 'header'. De variabele 
> 'header_printed' wordt op 0 gezet ('false').
> 
> Het tweede code block wordt uitgevoerd op een lijn 'Result:', en kijkt eerst 
> of 'header_printed' op 0 staat. Zo ja, dan wordt de opgeslagen header 
> uitgevoerd, en de variabele 'header_printed' op 1 ("true"). Daarna voeren 
> we de huidige lijn gewoon uit.
> 
> Voor een lijn "Processing failed" is er geen code block, en is er dus ook 
> geen uitvoer.
> 
> Wat mist nog: "Setup info" en "Final statistics". Dat lijkt een mooie oefening 
> voor de lezer ;-)
> 

Gelukt.


#!/usr/bin/awk -f
BEGIN {
state = "loud";
}
/Processing data/{
  header = $0 ; 
  state = "silent" ;
}
!/Processing failed/ && state == "silent" && !/Processing data/ {
  print header ;
  state = "goloud" ;
}
!/Processing failed/ && state == "goloud" && !/Processing data/ {
  state = "loud" ;
}
!/Processing failed/ && state == "loud" {
  print $0 ; 
}
# l l

Toelichting in de follow up.


Groeten
Geert Stappers
-- 
Leven en laten leven


Reply to: