The AWK version is functionally identical, and not very much shorter, or any more elegant: awk ‘/output start/ {s=1};{if (s==1) print $0};/output end/ {s=0}’ (the perl version can generally be made that small, too.) I would instead suggest sed(1), since this is precisely what it’s designed for: sed –n ‘/output start/,/output end/p’ < infile -Adam From: roundtable-bounces@muug.mb.ca [mailto:roundtable-bounces@muug.mb.ca] On Behalf Of Sean Walberg Sent: Wednesday, November 10, 2010 10:56 To: Continuation of Round Table discussion Subject: Re: [RndTbl] Command line challenge: trim garbage from start and end of a file. OTTOMH: perl -n -e 'BEGIN {$state = 0} $state = 1 if ($state == 0 and /output start/); $state = 2 if ($state == 1 and /output end/) ; print if ($state == 1)' < infile > outfile I'll bet there's a shorter AWK version though. Sean On Wed, Nov 10, 2010 at 10:51 AM, John Lange <john@johnlange.ca> wrote: I have files with the following structure: garbage garbage garbage output start .. good data .. good data .. good data .. good data output end garbage garbage garbage How can I extract the good data from the file trimming the garbage from the beginning and end? The following works just fine but it's dirty because I don't like the fact that I have to pick an arbitrarily large number for the "before" and "after" values. grep -A 999999 "output start" <infile> | grep -B 999999 "output end" > newfile Can anyone come up with something more elegant? -- John Lange www.johnlange.ca _______________________________________________ Roundtable mailing list Roundtable@muug.mb.ca http://www.muug.mb.ca/mailman/listinfo/roundtable -- Sean Walberg <sean@ertw.com> http://ertw.com/