Random Perl
I found some really old perl scripts from last century or so:
This will convert irc logs from axur to mirc:
#!/usr/local/bin/perl -w
#
#
use strict;
use Time::Local;
my $month1 = 0;
my $day1 = 0;
my $year1 = 0;
my $hour1 = 0;
my $minutes1 = 0;
my $seconds1 = 0;
my $month2 = 0;
my $day2 = 0;
my $year2 = 0;
my $hour2=0;
my $minutes2 = 0;
my $seconds2 = 0;
my $time1 = "";
my $time2 = "";
my @calendar = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
#open(LOGFILE, "$ARGV[0]") || die "can't open logfile: $!";
while() {
chomp();
($month1, $day1, $year1, $hour1, $minutes1, $seconds1) = /^[(d+)/(d+)/(d+) @ (d+):(d+):(d+)]/;
if ( $. == 1 ) { # start of log file
#print "Session Start: $calendar[$month1-1] $day1 $hour1:$minutes1:$seconds1 20$year1 n";
$time1 = timelocal($seconds1, $minutes1, $hour1, $day1, $month1-1, $year1);
print "Session Start: ", scalar(localtime($time1)), " n";
}
if ( ( $day1 != $day2 ) && ( $. != 1) ) { # days changed
#print "Session Close: $calendar[$month2-1] $day2 $hour2:$minutes2:$seconds2 20$year2 n";
#print "Session Start: $calendar[$month1-1] $day1 $hour1:$minutes1:$seconds1 20$year1 n";
$time2 = timelocal($seconds2, $minutes2, $hour2, $day2, $month2-1, $year2);
$time1 = timelocal($seconds1, $minutes1, $hour1, $day1, $month1-1, $year1);
print "Session Start: ", scalar(localtime($time2)), " n";
print "Session Close: ", scalar(localtime($time1)), " n";
}
# if ( ( />(deimos)/i ) || ( />(sleepy)/i ) ) {
# s/>(deimos)//ig;
# s/>(sleepy)//ig;
#}
split( /]/);
print "[$hour1:$minutes1]$' n";
($month2, $day2, $year2, $hour2, $minutes2, $seconds2) = ($month1, $day1, $year1, $hour1, $minutes1, $seconds1);
}
$time1 = timelocal($seconds1, $minutes1, $hour1, $day1, ($month1-1), $year1);
print "Session Close: ", scalar(localtime($time1)), " n";
#close(LOGFILE);
This converts sar output to a graph:
#!/usr/bin/perl
@cpu=`sar`;
$datafile="/tmp/cpu-data$$";
$cmndfile="/tmp/cpu-cmnd$$";
foreach $line (@cpu) {
if ( $line=~/d+:d+:d+s+d+/ ) {
$_ = $line;
($hr)=/^(d+)/;
($min)=/^d+:(d+)/;
($usr)=/s+(d+)/;
($sys)=/s+d+s+(d+)/;
($wio)=/s+d+s+d+s+(d+)/;
($idle)=/s+d+s+d+s+d+s+(d+)/;
@hrs[$hr]=$hr;
@usr[$hr]=@usr[$hr]+$usr;
@sys[$hr]=@sys[$hr]+$sys;
@wio[$hr]=@wio[$hr]+$wio;
@idle[$hr]=@idle[$hr]+$idle;
@ints[$hr]=@ints[$hr]+1;
}
}
open DATA, ">$datafile" or die "Cannot open $datafile for writing";
open CMND, ">$cmndfile" or die "Cannot open $cmndfile for writing";
foreach $hr (@hrs) {
if ($hr != 0) {
$usr=sprintf("%.1f",$usr[$hr]/$ints[$hr]);
$sys=sprintf("%.1f",$sys[$hr]/$ints[$hr]);
$wio=sprintf("%.1f",$wio[$hr]/$ints[$hr]);
$idle=sprintf("%.1f",$idle[$hr]/$ints[$hr]);
print DATA "$hrt$usrt$syst$wiot$idlen";
}
}
close DATA;
print CMND "set term png colorn";
print CMND "set out 'cpu.png'n";
print CMND "set gridn";
print CMND "set title 'CPU Usage'n";
print CMND "set ylabel 'percent'n";
print CMND "plot '$datafile' using 1:2 title 'usr' with lines, \n";
print CMND " '$datafile' using 1:3 title 'sys' with lines, \n";
print CMND " '$datafile' using 1:4 title 'wio' with lines, \n";
print CMND " '$datafile' using 1:5 title 'idle' with linesn";
# create graph using constructed gnuplot command file and data
# NOTE: the datafile is specified within the command file
system("/opt/sfw/bin/gnuplot $cmndfile");
# clean up temp files
system("rm $datafile");
system("rm $cmndfile");
Here's a script to "invoke" someone in irssi via irc:
#!/usr/bin/perl -w
use strict;
use vars qw($VERSION %IRSSI);
use Irssi;
$VERSION = '1.00';
%IRSSI = (
authors => 'deimos',
contact => 'deimos',
name => 'Invokation',
description => 'This script allows ' .
'someone to invoke you. Thereby alerting' .
'you to them.',
license => 'Public Domain',
);
sub event_privmsg {
# $data = "nick/#channel :text"
my ($server, $data, $nick, $address) = @_;
my ($target, $text) = split(/ :/, $data, 2);
Irssi::signal_stop() if ($text =~ /invokes/ || $nick =~ /idiot/);
}
Irssi::signal_add("event privmsg", "event_privmsg")
And here's way to grab urls out of axur log files:
#!/usr/bin/perl -w
#
use strict;
my ($urls, $ltrs, $gunk, $punc, $any, $foundurl) = "";
open (LOGFILE,"/home/deimos/public_html/urls/chan_$ARGV[0].html") || die "can't open logfile:$!";
$urls = '(http|https|ftp)';
$ltrs = 'w';
$gunk = '/#~:.?+=&%@!-';
$punc = '.:?-';
$any = "${ltrs}${gunk}${punc}";
while () {
chomp();
if (/ b($urls:[$any]+?) (?=[$punc]*[^$any]|$) /igox) {
print "$1n";
};
}
close LOGFILE;