in reply to
Need help in file processing
use strict;
use warnings;
use Data::Dumper;
my %hash;
my @names;
while(<DATA>)
{
my ($Groupname,@Data) = split(/\s+/,$_);
foreach(@Data)
{
my ($name,$count) = split(/\|/,$_);
unless ( grep( /^$name$/, @names ) ) {
push(@names,$name);
}
$hash{$Groupname}->{$name}++;
}
}
&Format(\%hash,\@names);
sub Format
{
my ($hash_ref,$name_ref) = @_;
my @Names = sort @$name_ref;
my @Group_names = keys %{$hash_ref};
my $filename = "test.txt"; #Give File Path
open my $fh, '>>', $filename or die "Can't write to '$filename
+': $!\n";
print $fh "\t@Names\n";
foreach my $g_name (@Group_names)
{
print $fh "$g_name\t";
foreach my $name(@Names)
{
unless (exists $hash_ref->{$g_name}->{$name})
{
print $fh qq{0\t};
}
else
{
print $fh $hash_ref->{$g_name}->{$name}.qq{\t};
}
}
print OUT qq{\n};
}
}
__DATA__
Group1: somo|112345478 somo|734567233 homo|233689876
Group2: somo|904686712 somo|891145662 somo|106736432
Group3: aomo|397634567 aomo|123446789
Group4: aomo|905672345 aomo|120846789
Use open() function to open the input file and read each line using while loop, instead of using <DATA>
Update:
Updated the file open() safer method, as per Arunbear advise! Thanks Arunbear ++