can you help about this script

Giorgos Keramidas keramida at ceid.upatras.gr
Thu Nov 22 09:41:02 PST 2007


On 2007-11-21 12:26, ann kok <annkok2001 at yahoo.com> wrote:
> Hi all
> how command "date, hostname" run in awk program?
>
> awk -F program.awk file.txt

You don't use backticks...  These are a feature of the shell, and
running a script through progname.awk is no longer a shell session.

Try system("date") in your awk(1) script:

> program.awk
>
>      BEGIN { RS = "\n" ; FS = "|" }
>
>      {
>            print "Name:", $9
>            print "Created: `date`"   
>            print "from: `hostname`"
>            print ""
>      }


        BEGIN {
                RS ="\n";
                FS = "|";
        }

        {
                printf "Name:    %s\n", $9;
                printf "Created: %s\n", system("date");
                printf "From:    %s\n", system("hostname");
        }

Running system("hostname") once for each file may be horribly
inefficient, though.  If I were you, I'd write this as a *shell* script,
which runs "hostname" once, stashes the result away in a variable, and
reuses it all the time.

Running "date" may be a bit less efficient than something like
gettimeofday().  Perl has a gettimeofday() function in the Time::HiRes
module, so it may be worth investigating if that may speed things up a
bit more.

A completely untested first try to do something like this is ...

        #!/usr/bin/perl -w

        use strict;

        use POSIX qw(strftime);
        use Time::HiRes qw(gettimeofday);

        my $hostname = `hostname`;
        my $line;
        while (defined($line = <STDIN>)) {
                chomp $line;
                my @fields = split /|/, $line;
                if ($#fields >= 0) {
                        my ($seconds, $microseconds) = gettimeofday();
                        printf "Name:    %s\n", $fields[8];
                        printf "Created: %s\n",
                            strftime("%Y-%m-%d %H:%M:%S", gmtime($seconds));
                        printf "From:    %s\n", $hostname;
                }
        }



More information about the freebsd-questions mailing list