#!/usr/bin/perl use strict; use warnings; use Data::Dump qw(pp); #Data::Dumper is also great! my %recordState; #recordid=>OWNER|WATING=>line my $OwnerOrWaiting=""; while () { s/\s+$//; # delete trailing whitespace if (/^FILENAME/) { $OwnerOrWaiting = (split)[3]; } if (m|^/|) { my ($record_id) = (split)[1]; push @{$recordState{$record_id}{$OwnerOrWaiting}}, $_; } } sub get_fields { my $line = shift; my %fields; @fields{qw(FILENAME RECORD_ID M USER UNBR UNO TTY TIME DATE)} = split(' ', $line, 9); return %fields; } print "The record numbers are:\n"; print "\t$_\n" foreach (keys %recordState); # I don't know what kind of queries you want, but # for example print some basic data for any queue's that # have 2 or more people waiting... foreach my $recNum ( keys %recordState) { if ( @{$recordState{$recNum}{WAITING}} >= 2) { print "Hey, there are at least 2 guys in this crowd!\n"; foreach my $line ( @{$recordState{$recNum}{WAITING}} ) { my %temp = get_fields($line); #this next is a hash slice... print "@temp{'RECORD_ID','USER','TIME','DATE'}\n"; } } } print "Dumping data...\n"; foreach my $recHashref ( values %recordState) { print "OWNER $_\n", for @{$recHashref->{OWNER}}; print "WAITING $_\n", for @{$recHashref->{WAITING}}; } print pp(\%recordState); =OUTPUTS The record numbers are: 001!L!311895 001!10274882 00151120273 Hey, there are at least 2 guys in this crowd! 00151120273 jmorg 13:48:32 Jul 20 00151120273 gdavi 13:54:22 Jul 20 Dumping data... OWNER /prod-data/J 001!L!311895 X jmorg 2015244 134 s/109 13:48:32 Jul 20 WAITING /prod-data/J 001!L!311895 X jmorg 5713932 191 ts/46 14:01:42 Jul 20 OWNER /prod-datahi 001!10274882 X rfuse 3354796 61 ts/43 13:39:02 Jul 20 WAITING /prod-datahi 001!10274882 X jmorg 3584038 247 ts/49 13:39:22 Jul 20 OWNER /prod-data/J 00151120273 X jmorg 3584038 247 ts/49 13:38:12 Jul 20 WAITING /prod-data/J 00151120273 X jmorg 2015244 134 s/109 13:48:32 Jul 20 WAITING /prod-data/J 00151120273 X gdavi 1359996 62 ts/20 13:54:22 Jul 20 =cut #### =And rest of the story, pp() output and __DATA__ { "001!10274882" => { OWNER => [ "/prod-datahi 001!10274882 X rfuse 3354796 61 ts/43 13:39:02 Jul 20", ], WAITING => [ "/prod-datahi 001!10274882 X jmorg 3584038 247 ts/49 13:39:22 Jul 20", ], }, "001!L!311895" => { OWNER => [ "/prod-data/J 001!L!311895 X jmorg 2015244 134 s/109 13:48:32 Jul 20", ], WAITING => [ "/prod-data/J 001!L!311895 X jmorg 5713932 191 ts/46 14:01:42 Jul 20", ], }, "00151120273" => { OWNER => [ "/prod-data/J 00151120273 X jmorg 3584038 247 ts/49 13:38:12 Jul 20", ], WAITING => [ "/prod-data/J 00151120273 X jmorg 2015244 134 s/109 13:48:32 Jul 20", "/prod-data/J 00151120273 X gdavi 1359996 62 ts/20 13:54:22 Jul 20", ], }, } =cut __DATA__ UniData Release 7.2 Build: (3786) (c) Copyright Rocket Software, Inc. 1988-2009. All rights reserved. Current UniData home is /usr/udthome/. Current working directory is /usr/local/rfs/udt. :TERM ,0 :UDT.OPTIONS 20 ON :LOGTO /ud/JWP :LIST.QUEUE FILENAME RECORD_ID M OWNER UNBR UNO TTY TIME DATE /prod-data/J 00151120273 X jmorg 3584038 247 ts/49 13:38:12 Jul 20 -------------------------------------------------------------------------- FILENAME RECORD_ID M WAITING UNBR UNO TTY TIME DATE /prod-data/J 00151120273 X jmorg 2015244 134 s/109 13:48:32 Jul 20 /prod-data/J 00151120273 X gdavi 1359996 62 ts/20 13:54:22 Jul 20 FILENAME RECORD_ID M OWNER UNBR UNO TTY TIME DATE /prod-data/J 001!L!311895 X jmorg 2015244 134 s/109 13:48:32 Jul 20 -------------------------------------------------------------------------- FILENAME RECORD_ID M WAITING UNBR UNO TTY TIME DATE /prod-data/J 001!L!311895 X jmorg 5713932 191 ts/46 14:01:42 Jul 20 FILENAME RECORD_ID M OWNER UNBR UNO TTY TIME DATE /prod-datahi 001!10274882 X rfuse 3354796 61 ts/43 13:39:02 Jul 20 -------------------------------------------------------------------------- FILENAME RECORD_ID M WAITING UNBR UNO TTY TIME DATE /prod-datahi 001!10274882 X jmorg 3584038 247 ts/49 13:39:22 Jul 20