Gurr has asked for the wisdom of the Perl Monks concerning the following question:

I know this a simple question and I should be reading FAQ. But I could not find it.

I need to read lines that has only one word and print them. Can you help me?

  • Comment on How can I read and print lines that has only one word from a file

Replies are listed 'Best First'.
Re: How can I read and print lines that has only one word from a file
by cjf (Parson) on Jul 15, 2002 at 03:35 UTC

    So you want to open a file and print out all lines that only contain one word? If so, this should work:

    open FILE, "file.txt" or die $!; while (<FILE>) { chomp; print "$_\n" if $_ =~ /^(\w+)$/; } close FILE;

    Let me know if you have any questions.

    Update: ++'s to tadman for the improvements below.

      Or alternatively, being a little more accomodating:
      while (<>) { print if (/^\s*\S+\s*$/); }
      You can call this with either one file, or as many as you like. The double-angle-brackets just read in anything from @ARGV. Further, it looks for a single group of "non-space" characters. This includes things with punctuation and such.
      Yes I have a question. Does /^(\w+)$/ mean that lines that start with one word or contain one word?
        It means, literally, "start of line(^), followed by one-or-more word-characters(\w+), followed by end of line($)". This is one possible definition of "one word on line".
Re: How can I read and print lines that has only one word from a file
by jmcnamara (Monsignor) on Jul 15, 2002 at 07:16 UTC

    Here is one way:     perl -nae 'print if @F == 1' file

    And here is another:     awk 'NF == 1' file

    --
    John.

      ++! But don't forget to mention that perlrun is the place to look at when you hit a novice with such a solution. :-)

      Makeshifts last the longest.