I am trying to split a file into multiple smaller files based on a regex and file naming convention I am searching for lines that begin with the word zone, and want to use the second word in the line to use as a file name. I then want to write all lines in the file into that filename using the second word in the line, until I hit another line that starts with the same word and use the second word in that line as the next filename. Based on the data file below, it should create a file named 1file.txt, and a file named 2fileb, with 6 lines of data each.
#!/usr/bin/env perl use strict; use warnings; open(my $infh, '<', 'testdat.dat') or die $!; my $outfh; my $filecount = 0; while ( my $line = <$infh> ) { if ( $line =~ /^zone>\s*(\w+\W+(\w+)\s*$)/ ) { close($outfh) if $outfh; $outfh = $2; open($outfh, '>', sprintf($outfh'.txt', ++$filecount)) or die +$!; } print {$outfh} $line or die "Failed to write to file: $!"; } close($outfh); close($infh); Datafile = zone 1filea 1ss record1a record1b record1c record 1d 2 record empty endoffile zone 2fileb 1ss record1a record1b record1c record 1d 2 record empty endoffile
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |