Breaking large file into pieces
Randal Schwartz
merlyn at iwarp.intel.com
Wed Sep 12 06:05:55 AEST 1990
In article <1990Sep11.134238.20218 at dg-rtp.dg.com>, monroe at dg-rtp (Mark A Monroe) writes:
| I want to rip a large file into pieces, naming new files according
| to an ID string in the large file. For example, the large file contains
| records that look like this:
|
| xxx-00001239 data data data
| description
| .
| .
| (variable length)
| .
| <---blank line
| xxx-00001489 data data data
| description
| .
| .
| (variable length)
| .
| <---blank line
| xxx-00001326 data data data
|
| When I find a line in the large data file that starts
| with "xxx-0000", I want to open a file named "xxx-0000<number>",
| like "xxx-00001489", and write every line, including
| the current one, into it. When I see another "xxx-0000",
| I want to close the file, open a new file named for the new id
| string, and continue writing. At the end of the large data
| file, close all files and exit.
|
| Any suggestions?
You didn't say "and I don't want it in Perl", so I'm considering
this solution fair game...
perl -pe 'open(STDOUT,">$1") if /^(xxx-\d+)/;' bigdatafile
Pretty durn simple. The right tool for the job. Yeah, you could do
it with an awk script feeding into a /bin/sh (or with a smarter awk),
but this is too easy.
Just another Perl hacker,
--
/=Randal L. Schwartz, Stonehenge Consulting Services (503)777-0095 ==========\
| on contract to Intel's iWarp project, Beaverton, Oregon, USA, Sol III |
| merlyn at iwarp.intel.com ...!any-MX-mailer-like-uunet!iwarp.intel.com!merlyn |
\=Cute Quote: "Welcome to Portland, Oregon, home of the California Raisins!"=/
More information about the Comp.unix.shell
mailing list