Breaking large file into pieces

4197,ATTT rbr at bonnie.ATT.COM
Wed Sep 12 22:46:34 AEST 1990


In article <1990Sep11.134238.20218 at dg-rtp.dg.com> monroe at dg-rtp.dg.com (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?  

Use context split "csplit(1)" to break up the file efficiently. Then
use head/cut/mv to rename the pieces.

csplit -f aaa  /"^xxx-0000"/  {99}  <in-file-name>
rm aaa00
for FN in `ls aaa*`
do
	NFN=`head -1 $FN | cut -d' ' -f1 `
	mv $FN $NFN
done

Bob Rager



More information about the Comp.unix.shell mailing list