It's perl, rather than bash. Some things need a bit more oomph.
-Adam
#!/usr/local/bin/perl -w use strict; my $Printcap = "/hub/share/etc/printcap"; my($a,$b,@Server,$c,@PrintQueue,); my $i = 0; my $j = 0; open (PRINTCAP, "$Printcap") or die "can't open input file"; #Run through the printcap recording the queue and the server in separate arrays. The separate arrays allow us to recall the data #later asynchronously. This looks like it could have been accomplished with a associative array, but there is no unique index, #since two print queues on separate servers can have the same name as far as I know - Adam while () { if ( /^\n$/ ) { $i++; } if ( /:lp\=:/ ) { ($a,$b,$Server[$i]) = split(/=/,$_); chomp $Server[$i]; $Server[$i] =~ s/(\:|\\)//g; } if ( /:rp\=/ ) { ($c, $PrintQueue[$i]) = split(/=/,$_); $PrintQueue[$i] =~ s/(\:|\\)//g; chomp $PrintQueue[$i]; } } # printcap ends on a new line so there will be no elements in the arrays for the last value of $i $i--; # Now having collected the data from printcap we dump the stanza for printers.conf while ( $j <= $i ){ print "\n"; print "Info\n"; print "Location\n"; print "DeviceURI lpd://$Server[$j].my.company.internal.domain.com/$PrintQueue[$j]\n"; print "State Idle\n"; print "Accepting Yes\n"; print "JobSheets none none\n"; print "QuotaPeriod 0\n"; print "PageLimit 0\n"; print "KLimit 0\n"; print "\n"; $j++; }
-Adam
Thanks!
ReplyDeleteYou're welcome! (Sorry missed your comment earlier ;-)
ReplyDelete