[EMAIL PROTECTED] wrote: > Help. I'm a frustrated newbie who wants to use Perl to make > my life easier. > > The following simple task is only one small part of a program > I'm trying to > put together to automate some things I currently do manually. > > I have a file whose format looks like this: > > name1 name2 name3 > name4 name5 name6, etc. > > The names are separated by spaces. I need the names to be > one name per > line, like this: > > name1 > name2 > name3, etc.
If the names don't include embedded spaces (i.e. all the whitespace is delimiters), you can use the default split() function for this: while(<>) { print "$_\n" for split; } The perl one-liner for this would be: $ perl -lne 'print for split' myfile.txt ... > > My next Perl task after I get my list of one name per line, > is to sort the > list and eliminate duplicate names. Let's take it step by step. Consider: @arr = <>; This reads all the input lines into an array. But we really want to split each line into the separate names, so we use map for this: @arr = map split, <>; Sorting is trivial: @arr = sort map split, <>; Eliminating duplicates can be done through a standard trick: @arr = do { my %seen; grep !$seen{$_}++, sort map split, <> }; Now @arr contains the unique names, in sorted order, ready to print out. The perl one-liner would be: perl -le 'print for grep !$seen{$_}++, sort map split, <>' myfile.txt n.b., moving the sort from where it is to in front of the grep would be more efficient if the number of duplicates is large. HTH -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>