in reply to match from a file and output to another

I think this does what you want.
use strict; open (INFILE, "<infile") or die "could not open file"; open (OUTFILE, ">outfile") or die "could not open file"; <INFILE>; # dump the header on the first line while (<INFILE>) { print OUTFILE join(" ", (split "~", $_)[0,3]), "\n"; } close INFILE; close OUTFILE;
outfile will now contain
D:\minibuild\nbsssbs\appl\src\erlmtrihm.cxx 444912 D:\minibuild\nbsssbs\appl\src\erlmtrihm.cxx 966656 D:\minibuild\nbsssbs\appl\src\erlmtrihm.cxx 190994 D:\minibuild\nbsssbs\appl\src\erlmtrihm.cxx 194417 D:\minibuild\nbsssbs\appl\src\erlmtrihm.cxx 916765 D:\minibuild\nbsssbs\appl\src\erlmtrihm.cxx 955515
--UPDATE--

After thinking about this at lunch. This could be a one liner.

perl -e '$,=" ";while (<>) {print ((split "~", $_)[0,3],"\n") if (/~/) +}'<infile >outfile
or even
perl -aF/~/ -ne '$,=" ";print (@F[0,3],"\n") if /~/' infile >outfile

--

flounder