UNIX & GNU/Linux - awk - Using getline to retrieve data

We've already played with awk, passing it a file, but we're going now to see how to retrieve data from the user with the command line.

We would like to know what's the name of the user.

Let's ask him.

Explanation

The -f flag is normally to tell awk that we're going to pass a file as argument. But if we don't, the shell will wait for a file.
Instead of a file, we will give to awk a string that we'll retrieve thanks to the getline function.

We could notice that all the code is inside the BEGIN pattern because there is only one line to analyse.

At line 7, we're going to retrieve the name's user with:

getline name < "-";

In this snippet we tell to getline to retrieve data from the user, putting this in the "-" character and then to put this into the name variable.
We need these two steps to retrieve data with getline.

Once retrieved, we can check is the user entered a name or if he didn't.
If he did, we print it, otherwise we use the UNKNOWN name.

We also retrieve the current date with:

"date" | getline;

Once retrieved, we can use columns of date we want.
Indeed, the full date is something like that:

Sat Oct 27 11:32:04 CEST 2012

So if we want to display, just "Sat", we have to use the $1 variable.
For 2012, it's $6, because this is the sixth element of date.

Code

bp5.awk

#!/bin/awk

# Begin
BEGIN {
    FS=" ";
    print "Hello, what is your name?";
    getline name < "-";
    if (name == "") {
        name = "UNKNOWN";
    }
  "date" | getline;
  myDate  = $3 " " $2 " " $6;
    myHour = substr($4, 1, 5);
    print "On " myDate " at " myHour " I saw you, " name "!";
    exit;
};

# Dev
{
}

# End
END {}

Executing

awk -f bp5.awk

Output

Hello, what is your name?
Mi-K
On 27 Oct 2012 at 11:35 I saw you, Mi-K!

Finally

We can now easily retrieve data with getline.
Well done, you've made it. smiley

Add new comment

Plain text

  • No HTML tags allowed.
  • Lines and paragraphs break automatically.