- 论坛徽章:
- 0
|
#!/usr/bin/perl
use strict;
use warnings;
#if success output to outputNumber.txt;
if (@ARGV < 1)
{
print "usage:mergeData.pl inputfile\n";
exit(1);
}
my %datasHash;
open my $fileHandle, "<", $ARGV[0] or die "open $ARGV[0] failed$!";
while(my $lineData = <$fileHandle>)
{
chomp $lineData;
if($lineData =~ /^\s+$/)
{
next;
}
$lineData =~ s/^\s+//;
$lineData =~ s/\s+$//;
my @wordArray = split /\s+/, $lineData;
my @exitsKey;
my @notExitsKey;
foreach(@wordArray)
{
if( exists $datasHash{$_})
{
push @exitsKey,$_;
}
else
{
push @notExitsKey,$_;
}
}
if (@exitsKey == 0)
{
foreach(@wordArray)
{
$datasHash{$_} = \@wordArray;
}
}
else {
my @mergeArray = @notExitsKey;
for(my $index = 0; $index < @exitsKey; $index++)
{
my $ref1 = $datasHash{$exitsKey[$index]};
@mergeArray = (@$ref1, @mergeArray);
@$ref1 = ();
}
foreach(@mergeArray)
{
$datasHash{$_} = \@mergeArray;
}
}
}
my %refHash;
open my $outHandle, ">", "outputNumber.txt" or die "failed open outputNumber.txt $!";
foreach (keys %datasHash)
{
my $ref1 = $datasHash{$_};
if ( ! exists $refHash{$ref1})
{
my @result = join " ",@$ref1;
#print @result, "\n";
print $outHandle @result,"\n";
$refHash{$ref1} = 1;
}
}
|
|