1 Line_1_3 Line_3_3 Line_4_3
2 Line_2_3 (empty) Line_5_3
3 (empty) (empty) Line_6_3
4 (empty) (empty) Line_7_3
. . . .
. . . .
. . . .
n Line_n_3 Line_n_3 Line_n_3[n]
####
Line_1:Line_1_1:Line_1_2:Line_1_3:Line_1_4
Line_2:Line_2_1:Line_2_2:Line_2_3:Line_2_4
####
Line_3:Line_3_1:Line_3_2:Line_3_3:Line_3_4
####
Line_4:Line_4_1:Line_4_2:Line_4_3:Line_4_4
Line_5:Line_5_1:Line_5_2:Line_6_3:Line_5_4
Line_6:Line_6_1:Line_6_2:Line_6_3:Line_6_4
Line_7:Line_7_1:Line_7_2:Line_7_3:Line_7_4
####
#!/usr/bin/perl
use strict;
use warnings;
use Text::Table;
use Data::Dumper;
use List::Util qw{max};
use Fcntl qw(:flock); # import LOCK_* and SEEK_END constants
$| = 1;
my (@result , @values , @array);
sub array_sub {
foreach my $arg (@_) {
open (READ, "<" , $arg)
or die ("Could not open: ".$arg." - $!\n");
flock(READ, LOCK_EX)
or die "Could not lock '".$arg."' - $!\n";
if (-z "".$arg."") {
print "File '".$arg."' is empty!\n";
# -z File has zero size (is empty).
}
my @doc_read = ;
chomp @doc_read;
foreach $_ (@doc_read) {
@result = split (':', $_);
if (/^\s*$/) { # /^\s*$/ check for "blank" lines may contain spaces or tabs
next;
}
push @values, $result[3]; # get timestamp
}
# push an array to another to create 2-dimentional array
push (@array, [@values]);
@values = ();
close (READ)
or die ("Could not close: ".$arg." - $!\n");
}
my $max_idx = max map $#$_, @array;
=table structure
If no columns are specified, the number of columns is taken from the first
line of data added to the table. The effect is as if you had specified
Text::Table->new( ( '') x $n), where $n is the number of columns.
=cut
my $tb = Text::Table->new;
=loop values
$i = maximum number or array values
$_ = maximym number of characters
=cut
foreach my $i (0 .. $max_idx) {
$tb->add( map $array[$_][$i], 0 .. $#array);
}
return $tb;
}
my $a_table = array_sub(@ARGV);
print $a_table;
####
$VAR1 = [
[
'Line_1_3',
'Line_2_3'
],
[
'Line_3_3'
],
[
'Line_4_3',
'Line_5_3',
'Line_6_3',
'Line_7_3'
]
];
Line_1_3 Line_3_3 Line_4_3
Line_2_3 Line_5_3
Line_6_3
Line_7_3
####
#!/usr/bin/perl
use strict;
use warnings;
use Text::Table;
use Data::Dumper;
use List::Util qw{max};
use Fcntl qw(:flock); # import LOCK_* and SEEK_END constants
$| = 1;
my $value = (); #create anonymous string_ref
my %hash = ();
sub hash_sub {
foreach my $arg (@_) {
open (READ, "<" , $arg)
or die ("Could not open: ".$arg." - $!\n");
flock(READ, LOCK_EX)
or die "Could not lock '".$arg."' - $!\n";
if (-z "".$arg."") {
print "File '".$arg."' is empty!\n";
# -z File has zero size (is empty).
}
my @doc_read = ;
chomp @doc_read;
foreach $_ (@doc_read) {
my @result = split (':', $_);
if (/^\s*$/) { # /^\s*$/ check for "blank" lines may contain spaces or tabs
next;
}
push (@$value , $result[3]);
}
$hash{$arg} = $value;
$value = (); # emptying the string_ref for the next ARGV
close (READ)
or die ("Could not close: ".$arg." - $!\n");
}
my $max_idx = max map $#$_, values %hash;
my $tb = Text::Table->new;
for my $i (0 .. $max_idx) {
$tb->add( map $hash{$_}[$i], sort keys %hash);
}
return $tb;
}
my $h_table = hash_sub(@ARGV);
print $h_table;
####
$VAR1 = {
'sample.txt' => [
'Line_1_3',
'Line_2_3'
],
'sample_2.txt' => [
'Line_3_3'
],
'sample_3.txt' => [
'Line_4_3',
'Line_5_3',
'Line_6_3',
'Line_7_3'
]
};
Line_1_3 Line_3_3 Line_4_3
Line_2_3 Line_5_3
Line_6_3
Line_7_3