How to get corresponding id in perl?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to get corresponding id in perl?
# 1  
Old 01-16-2009
How to get corresponding id in perl?

I have 2 arrays like this:

Code:
@array=('a','a','a','b','c','c','d','e','e');

@array1=('1','2','3','4','5','6','7','8','9');

I am taking the count of duplicate elements using this code.

Code:
@unique_elements=();
my %seen = ();

        my @unique_elements = grep !$seen{ $_ }++, @array;
        #@s=grep !$seens{ $_ }++, @pmid;
        foreach my $elem ( @unique_elements )
        {
                if($seen{$elem}>1)
                {
                       
                                print "<br>$elem appeared $seen{$elem} times <br>";
                       
                }
        }

I want to retrieve the corresponding id of the element appeared.

Output should be like this:

Code:
a appeared 3 times and id =1, 2 and 3

b appeared 1 times and id= 4

c appeared 2 times and id= 5 and 6

d appeared 1 times and id=7

e appeared 2 times and id=8 and 9

I am getting the count but not able to retrieve the id.

I tried like this:

Code:
foreach $id (@array1)
{
	#using the above code

}

But could not get the desired output!!

How can i get the corresponding id?

with regards
Vanitha
# 2  
Old 01-16-2009
You may consider something like this (do you really need id, id and id?):

Code:
@array=('a','a','a','b','c','c','d','e','e');

map { 
  $uniq{$_}++;
  push @{$idx{$_}}, ++$c
  } @array;

print map {
  $_, " appeared ",
  $uniq{$_}," times with ids ",
  join(',', @{$idx{$_}}), "\n"
  } sort keys %uniq;

Example output:

Code:
% perl -e'
@a=('a','a','a','b','c','c','d','e','e');
map{$uniq{$_}++;push @{$idx{$_}},++$c}@a;
print map{$_, " appeared ",$uniq{$_}," times with ids ",
join(",", @{$idx{$_}}), "\n"}sort keys%uniq
'
a appeared 3 times with ids 1,2,3
b appeared 1 times with ids 4
c appeared 2 times with ids 5,6
d appeared 1 times with ids 7
e appeared 2 times with ids 8,9

# 3  
Old 01-17-2009
Quote:
Originally Posted by radoulov
You may consider something like this (do you really need id, id and id?):

Code:
@array=('a','a','a','b','c','c','d','e','e');

map { 
  $uniq{$_}++;
  push @{$idx{$_}}, ++$c
  } @array;

print map {
  $_, " appeared ",
  $uniq{$_}," times with ids ",
  join(',', @{$idx{$_}}), "\n"
  } sort keys %uniq;

Example output:

Code:
% perl -e'
@a=('a','a','a','b','c','c','d','e','e');
map{$uniq{$_}++;push @{$idx{$_}},++$c}@a;
print map{$_, " appeared ",$uniq{$_}," times with ids ",
join(",", @{$idx{$_}}), "\n"}sort keys%uniq
'
a appeared 3 times with ids 1,2,3
b appeared 1 times with ids 4
c appeared 2 times with ids 5,6
d appeared 1 times with ids 7
e appeared 2 times with ids 8,9

Hi,

Thanks for your reply!!!!

I have another case like this:

@array=('Hum Genet','Hum Genet','Genomics');

@array1=('2370044','18570886','12799737');

I tried the code but the ids are retrieved partially i.e

output is like this:

Code:
Hum Genet appeared 2 times with ids 23,18

Genomics appeared 1 times with ids 12

The ouput should be like this:
Code:
Hum Genet appeared 2 times with ids 2370044,18570886

Genomics appeared 1 times with ids 12799737

How can i retrieve the complete id???



With regards
Vanitha
# 4  
Old 01-17-2009
Code:
@array=('Hum Genet','Hum Genet','Genomics');

@array1=('2370044','18570886','12799737');

map { 
  $uniq{$_}++;
  push @{$idx{$_}}, shift @array1
  } @array;

print map {
  $_, " appeared ",
  $uniq{$_}," times with ids ",
  join(',', @{$idx{$_}}), "\n"
  } sort keys %uniq;

# 5  
Old 01-19-2009
hope below can help you

Code:
@array=('a','a','a','b','c','c','d','e','e');
@array1=('1','2','3','4','5','6','7','8','9');
for($i=0;$i<=$#array;$i++){
	$hash{$array[$i]}->{NUM}++;
	$hash{$array[$i]}->{POS}.=(($hash{$array[$i]}->{POS})?", ":"").$array1[$i];
}
for $key(sort keys %hash){
	print $key," appeared ",$hash{$key}->{NUM}," times and id =",$hash{$key}->{POS},"\n";
}

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

PERL: In a perl-scripttTrying to execute another perl-script that SETS SOME VARIABLES !

I have reviewed many examples on-line about running another process (either PERL or shell command or a program), but do not find any usefull for my needs way. (Reviewed and not useful the system(), 'back ticks', exec() and open()) I would like to run another PERL-script from first one, not... (1 Reply)
Discussion started by: alex_5161
1 Replies

2. Programming

Perl: restrict perl from automaticaly creating a hash branches on check

My issue is that the perl script (as I have done it so far) created empty branches when I try to check some branches on existence. I am using multydimentional hashes: found it as the best way for information that I need to handle. Saing multidimentional I means hash of hashes ... So, I have ... (2 Replies)
Discussion started by: alex_5161
2 Replies

3. Shell Programming and Scripting

Perl :: reading values from Data Dumper reference in Perl

Hi all, I have written a perl code and stored the data into Data structure using Data::Dumper module. But not sure how to retreive the data from the Data::Dumper. Eg. Based on the key value( Here CRYPTO-6-IKMP_MODE_FAILURE I should be able to access the internal hash elements(keys) ... (1 Reply)
Discussion started by: scriptscript
1 Replies

4. UNIX for Advanced & Expert Users

perl and HP-UX : instmodsh in combination with software depot : update inventory for installed Perl

we create a HP-UX software depot with a new perl-modul. after installation of the software depot, the perl module i can't find with instmodsh in the inventory for installed Perl modules. - i have learned of using instmodsh command : i find out what modules are already installed on my system. ... (0 Replies)
Discussion started by: bora99
0 Replies

5. Shell Programming and Scripting

HELP on Perl array / sorting - trying to convert Korn Shell Script to Perl

Hi all, Not sure if this should be in the programming forum, but I believe it will get more response under the Shell Programming and Scripting FORUM. Am trying to write a customized df script in Perl and need some help with regards to using arrays and file handlers. At the moment am... (3 Replies)
Discussion started by: newbie_01
3 Replies

6. Shell Programming and Scripting

Hidden Characters in Regular Expression Matching Perl - Perl Newbie

I am completely new to perl programming. My father is helping me learn said programming language. However, I am stuck on one of the assignments he has given me, and I can't find very much help with it via google, either because I have a tiny attention span, or because I can be very very dense. ... (4 Replies)
Discussion started by: kittyluva2
4 Replies

7. Shell Programming and Scripting

Perl :How to print the o/p of a Perl script on console and redirecting same in log file @ same time.

How can i print the output of a perl script on a unix console and redirect the same in a log file under same directory simultaneously ? Like in Shell script, we use tee, is there anything in Perl or any other option ? (2 Replies)
Discussion started by: butterfly20
2 Replies

8. Shell Programming and Scripting

perl/unix: script in command line works but not in perl

so in unix this command works works and shows me a list of directories find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt but when i try running a perl script to run this command my $query = 'find . -name \*.xls -exec dirname {} \; | sort -u | > list.txt';... (2 Replies)
Discussion started by: kpddong
2 Replies

9. Shell Programming and Scripting

Passing date formats in Perl: i.e. Jul/10/2007 -> 20070710 (yyyymmdd) - Perl

Hi , This script working for fine if pass script-name.sh Jul/10/2007 ,I want to pass 20070710(yyyymmdd) .Please any help it should be appereciated. use Time::Local; my $d = $ARGV; my $t = $ARGV; my $m = ""; @d = split /\//, $d; @t = split /:/, $t; if ( $d eq "Jan" ) { $m = 0 }... (7 Replies)
Discussion started by: akil
7 Replies

10. Shell Programming and Scripting

[Perl] Accessing array elements within a sed command in Perl script

I am trying to use a script to replace the header of each file, whose filename are stored within the array $test, using the sed command within a Perl script as follows: $count = 0; while ( $count < $#test ) { `sed -e 's/BIOGRF 321/BIOGRF 332/g' ${test} > 0`; `cat 0 >... (2 Replies)
Discussion started by: userix
2 Replies
Login or Register to Ask a Question