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: