in reply to Re^12: How do I use grep in a script
in thread How do I use grep in a script

I have determined what the issue is attempting to add the "Name:" search.

The Name: is actually on a separate line in the text file ie.

STATUS Acct:142424 Disposition:9000 CANCEL Wait: 04/11/17 DEBTOR Name:LastName FirstName Ssn:123456789 Cbr: Ph:555.555.1212

So I need to somehow grab both the LastName and the 142424 and concatenate then into LastName_142424_2017.txt

while (<$fh>){ next unless /\S/; # skip blank lines if (/Acct:(\d+)/){ $acct = $1; if (/Name:([^\s]+)/){ $acct = $1.'_'.$acct; } } push @{$data{$acct}},$_ if ($acct); }
But this does not take into account for the Name: search to be on another line and still keep ALL the text to be added to the new file.

Any suggestions on how I can accomplish this?

Replies are listed 'Best First'.
Re^14: How do I use grep in a script
by poj (Abbot) on Dec 28, 2017 at 15:57 UTC

    Are the account numbers unique such that you can build a mapping of account number => name ?

    my %name = (); . . while (<$fh>){ next unless /\S/; # skip blank lines if (/Acct:(\d+)/){ $acct = $1; } if (/Name:([^\s]+)/){ $name{$acct} = $1; } push @{$data{$acct}},$_ if ($acct); }
    my $outfile = join '_',$name{$acct},$acct,'2017.txt';
    poj
      Yes Sir,

      The Acct number is unique, however, the Name: tag is NOT. It does occur elsewhere within the block of text for that acct number.

        Presumably the name is always the same within the block for that account. Try

        #!/usr/bin/perl use strict; my $acct; my %data = (); my %name = (); my $infile = 'Facs_Data.txt'; open my $fh,'<',$infile or die "Could not open '$infile' : $!"; while (<$fh>){ next unless /\S/; # skip blank lines if (/Acct:(\d+)/){ $acct = $1; } if (/Name:([^\s]+)/){ $name{$acct} = $1 unless defined $name{$acct}; } push @{$data{$acct}},$_ if ($acct); } close $fh; for my $acct (keys %data){ my $outfile = join '_',$name{$acct},$acct,'2017.txt'; print "Creating $outfile\n"; open my $fh,'>',$outfile or die "Could not open '$outfile' : $!"; for (@{$data{$acct}}){ print $fh $_; } close $fh; }
        poj