az1962 has asked for the wisdom of the Perl Monks concerning the following question:
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
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Using the second word in a line to split a file into multiple files
by haukex (Archbishop) on Aug 26, 2019 at 07:27 UTC | |
by az1962 (Initiate) on Aug 26, 2019 at 14:35 UTC | |
by haukex (Archbishop) on Aug 26, 2019 at 14:42 UTC | |
|
Re: Using the second word in a line to split a file into multiple files
by jcb (Parson) on Aug 26, 2019 at 03:04 UTC | |
|
Re: Using the second word in a line to split a file into multiple files
by jwkrahn (Abbot) on Aug 26, 2019 at 22:25 UTC | |
|
Re: Using the second word in a line to split a file into multiple files
by Marshall (Canon) on Aug 28, 2019 at 20:13 UTC |