#! /usr/local/bin/perl # oc32plentrainsc.pl inputfile interface # # class based plen runlength # creates matrix output for vsurf.pl or spreadsheets $class{0}=41; $class{1}=81; $class{2}=161; $class{3}=321; $class{4}=641; $class{5}=1501; $class{6}=4401; $lastclass=6; open(infile,$ARGV[0]) || die("Can't open input file\n"); $if=$ARGV[1]; # requested interface # skip header while(read(infile,$record,512)){ $cellcount=vec($record,2,8)*256+vec($record,3,8); $interface=vec($record,4,8)*256+vec($record,5,8); printf stderr "$interface\t$cellcount\n"; # Start reading in entries for ($i = 1; $i <= 17408; $i++) { read(infile,$record,60) || exit; if($i > $cellcount){next;} if(($if > 0) && ($if != $interface)){next;} if(vec($record,18,8) == 0x08){ $plen = vec($record,22,8)*256+vec($record,23,8); # determine length class into $cl for ($cl = 0; $cl <= $lastclass; $cl++) { if($plen < $class{$cl}){last;} } # determine class train behavior if($pclass == $cl){ $scount++; # serial count if($zcount> 0){ $zarray{$zcount}++; # printf"$pcount\t%d\t%d\t%d\n",$plen,$zcount,$zarray{$zcount}; } $zcount=0; # reset $zcount } else { if($scount > 1){ $clarray{$pclass,$scount}++; if($maxrlength < $scount){$maxrlength=$scount;} } $scount=1; $zcount++; } $pclass=$cl; } } } for ($i = 0; $i <= $lastclass; $i++) { printf"$i\t"; for ($j = 2; $j <= $maxrlength; $j++) { printf"%d\t",$clarray{$i,$j}+0; } printf"\n"; }