Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Fetching unique owner name

by JaWi (Hermit)
on Dec 03, 2002 at 13:35 UTC ( #217214=note: print w/replies, xml ) Need Help??


in reply to Fetching unique owner name

Hi,

update: Actually tested the code and refined it a bit...
update2: Crafted a better perl solution, not calling perl in Perl...

Couldn't you just do something like:

my ( @temp, %authors ); @temp = sort map { my @b=split; $b[2]; } `ls -l`; foreach ( @temp ) { $authors{$}=1 if not $authors{$_} and length $_; } print "$_\n" for keys %authors;'
IIRC, uniq is a standard unix command, which is also available under Solaris 7.

Greets,

-- JaWi

"A chicken is an egg's way of producing more eggs."

Replies are listed 'Best First'.
Re: Re: Fetching unique owner name
by Anonymous Monk on Dec 03, 2002 at 14:52 UTC
    HOw would this work? Am I in the right direction??
    @temp = '/mydirectory/directory'; my ( @temp, %authors ); @temp = sort map { my @b=split; $b[2]; } `ls -l`; foreach ( @temp ) { $authors{$}=1 if not $authors{$_} and length $_; } print "$_\n" for keys %authors;'
      Hi,

      Sorry, I (wrongly) assumed you were an advanced Perl monk. I'll explain my solution step by step:

      my ( @temp, %authors ); @temp = sort map { my @b=split; $b[2]; } `ls -l /path/to/authors`;
      (NB: note the added path, I forgot that in my original answer!)
      You should read this from right to left: each line of the output of the ls command is split and a map is created of each second element (ie. the user names). The array returned by map is sorted and assigned to @temp.
      The array @temp now contains all authors of the files in your directory, including doubles!

      foreach ( @temp ) { $authors{$}=1 if not $authors{$_} and length $_; }
      This will loop through @temp and make a hash with the author names as key. The value is only stored if it doesn't exists already and has a length of > 0.
      I do this to ensure the hash only contains unique names.

      print "$_\n" for keys %authors;
      This loops through the keys of the hash %authors and prints them. To get an array of the unique authors of the files in your directory you would do something like my @unique_authors = keys %authors;

      Hope this helps,

      -- JaWi

      "A chicken is an egg's way of producing more eggs."

        Thanks for all the help.

        This works except I keep getting these error messages along with output:
        Use of uninitialized value at per2.pl line 5. Use of uninitialized value at per2.pl line 5. Use of uninitialized value at per2.pl line 8. Use of uninitialized value at per2.pl line 8. smith rogers richards
        Here is the script:
        #!/usr/local/bin/perl -w use strict; my ( @temp, %authors ); @temp = sort map { my @b=split; $b[2]; } `ls -l /directory/pth/here`; foreach ( @temp ) { $authors{$_}=1 if not $authors{$_} and length $_; #I had to add $_ because the other way "$authors{$}=1" gave me an erro +r } print "$_\n" for keys %authors;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://217214]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (4)
As of 2022-08-17 17:10 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?