Johnny Hall wrote:
> 
> Hello all,

Hello,

> I am trying to take a file of variable length on a daily basis and
> divide it up into 4 equal parts for processing on each file.  Does
> someone have an easy way to do this?
> 
> The original file is just a series of numbers like..
> 
> 3233404936
> 3233404934
> 3233669122
> 3233557761
> 3233818369
> 3234343425
> 3233431553
> 3233455617
> 3233404932
> 3233435393
> 3233562369
> 3233554689
> ....
> 
> I've tried everything I know.  Granted, that isn't very much.  :-)
> 
> Here is what I'm doing so far..
> 
> #!/bin/perl -w
> # Script for cloning Unix hosts weekly.
> # This is ran from cron on Saturdays at 9am
> 
> # This will get Full savesets for all servers in the /root/backups/ux_serverlist file
> $SSID_LIST = "/tmp/ux_clonelist";
> @CLONE_LIST = `cat /root/backups/ux_serverlist`;
> system "rm $SSID_LIST";
> foreach $CLONE_HOST (@CLONE_LIST)
>    {
>         chomp $CLONE_HOST;
>         system "/usr/sbin/mminfo -q level=full,client=$CLONE_HOST -r 'ssid' -t 'one 
>week ago' >> $SSID_LIST";
>    }
> 
> # Attempt to break the /tmp/ux_clonelist file into equal parts for multiple cloning 
>streams
> $NUM_SSID = `cat '$SSID_LIST' | wc -l`;
> chomp $NUM_SSID;
> $NUM_CON_JOBS = 4;
> $SSID_PER_FILE = int(($NUM_SSID / $NUM_CON_JOBS) + 1);
> chomp $SSID_PER_FILE;
> $FILE_COUNT = 1;
> $CLONE_FILE_LIST = "$SSID_LIST.$FILE_COUNT";
> @SSID_LIST_ARRAY = `cat $SSID_LIST`;
> system "rm $CLONE_FILE_LIST";
> $SSID_COUNT = 0;
> $FILE_COUNT = 0;
> chomp $SSID_COUNT; 
> open(FILE, ">>$CLONE_FILE_LIST");
> while ($SSID_COUNT <= $SSID_PER_FILE)
>    {
>         foreach $SSID (@SSID_LIST_ARRAY)
>            {
>                 while ($SSID_COUNT <= $SSID_PER_FILE)
>                  {
>                 open(FILE, ">>$CLONE_FILE_LIST");
>                 chomp $SSID;
>                 print FILE "$SSID \n";
>                 $SSID_COUNT = ($SSID_COUNT + 1);
>                 close FILE;
>                  }
>            }
>                 $FILE_COUNT = ($FILE_COUNT + 1);
>                 $CLONE_FILE_LIST = "$SSID_LIST.$FILE_COUNT";
>    }
> 
> # Now start cloning from the 4 files
> #system "nsrclone -v -s catlmsxi02 -b 'UX Clone' -S -f $CLONELIST";
> #system "rm $CLONELIST";



This should do what you want:

#!/bin/perl -w
use strict;
# Script for cloning Unix hosts weekly.
# This is ran from cron on Saturdays at 9am

my $ssid_list    = '/tmp/ux_clonelist';
my $num_con_jobs = 4;

# This will get Full savesets for all servers in the /root/backups/ux_serverlist file
open CLONE, '/root/backups/ux_serverlist' or die "Cannot open 
'/root/backups/ux_serverlist': $!";
my @ssid_list_array;
while ( my $clone_host = <CLONE> ) {
    chomp $clone_host;
    push @ssid_list_array, `/usr/sbin/mminfo -q level=full,client=$clone_host -r 
'ssid' -t 'one week ago'`;
    }
my $num_ssid = @ssid_list_array;

# Break the clonelist into equal parts for multiple cloning streams
my $ssid_per_file = int( ( $num_ssid + ( $num_con_jobs - 1 ) ) / $num_con_jobs );
for my $file_count ( 1 .. 4 ) {
    open FILE, "> $ssid_list.$file_count" or die "Cannot open $ssid_list.$file_count: 
$!";
    print FILE splice @ssid_list_array, 0, $ssid_per_file;
    close FILE;
    }

# Now start cloning from the 4 files
for my $file_count ( 1 .. 4 ) {
    system "nsrclone -v -s catlmsxi02 -b 'UX Clone' -S -f $ssid_list.$file_count";
    unlink "$ssid_list.$file_count" or warn "Cannot delete $ssid_list.$file_count: $!";
    }

__END__



John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to