That works, as well as the Perl version I've been using:
perl -ne 'print if ($. == 1 || /pattern/)'
But timings for a real-life example (3GB file with ~16m lines, CentOS 7)
show the problem:
grep (v2.20): ~1.15s
perl (v5.36.1): ~4.48s
awk (v4.0.2): ~10.81s
Admittedly grep is just searching in those timings, but I suspect it could
accomplish the full task with a minimal decrease in speed.
Dan
On Mon, Aug 21, 2023 at 12:57 PM <[email protected]> wrote:
> Daniel Green <[email protected]> wrote:
>
> > I'm frequently searching CSV files with 20-30 columns, and when there's a
> > hit it can be hard to know what the columns are. An option to also print
> > the first line of a file (either always, or only if that file had a match
> > to the pattern) in addition to any hits would be nice.
> >
> > Thanks,
> > Dan
>
> It sounds like awk would be a better tool:
>
> awk 'FNR == 1 || /pattern/' files ...
>
> should do the trick.
>
> HTH,
>
> Arnold
>