-   Linux - General (
-   -   Awk variables (

danicobos 10-25-2011 06:07 AM

Awk variables
Hola everyone,

I am facing the following trouble related to the use of and internal Awk variable:

I have an awk script into a sh script. Into the awk script I assign a local variable:

host_name=substr($1,2,length($1)); (or whatever)

Then (we have not leave the awk script) I would like to use this "host_name" as argument to an external script. Of course, in order to make a system call I have to use a "system" command.

system("./ $host_name")

Crash! "host_name" is and internal awk variable and I have no idea how to "export" it, with the purpose that the shell can read it. Someone can say: export it using another system call! I can not pass any parameter to the system command.

Any idea, of how can I solve it

Thanks in advance.

colucix 10-25-2011 06:15 AM

Your code doesn't substitute the host_name value inside the system command, since you used the shell syntax instead of the awk syntax! Try this:

system("./ " host_name)

danicobos 10-26-2011 08:31 AM

Grazie colucix, but it does not work. With:

system("./ " host_name)

my script "" does not detect any argument as input, I imagine because "host_name" is not visible for system command.

Any other idea?


berbae 10-26-2011 04:26 PM

I tried with these testing scripts:

echo "I am external script"
echo "String parameter:----$1----"
echo "end of external script"


awk 'BEGIN {param="Hello World!"}
    {system("./external_script \"" param "\"")}' <<< "$dummy"

The result of the command:

I am external script
String parameter:----Hello World!----
end of external script

So the internal param awk variable was passed correctly to the external_script.
in awk, string string string means concatenation, it gives stringstringstring as the result string.
so a blank is necessary at the end of the command to separate it from the parameter.
I included also " around the parameter because it contains a space (\" gives a litteral double quote).
"./external_script \"" param "\""
will give
./external_script "Hello World!"
which is a correct command.

danicobos 10-27-2011 05:19 AM

Thank you berbae.

You are right! It works. But, what about if you are passing to you external script two (or more) arguments?

awk 'BEGIN {param1="Hello World!"} {param2="Hello Again!"}
{system("./external_script \"" param1 "\"" " param2 "\"")}' <<< "$dummy"

??? It does not work!

I'll really appreciate your help!


colucix 10-27-2011 07:17 AM

You need to correctly put the escaped quotes:

awk 'BEGIN {param1="Hello World!"} {param2="Hello Again!"}
  {system("./external_script \"" param1 "\" \"" param2 "\"") }' <<< "$dummy"

berbae 10-27-2011 07:24 AM

Tou have problem with double quotes.
What you need is that:

awk 'BEGIN {param1="Hello World!"
            param2="Hello Again!"}
    {system("./external_script \"" param1 "\" \"" param2 "\"")}' <<< "$dummy"

which gives the right output:

I am external script
String parameter1----Hello World!----
String parameter2----Hello Again!----
end of external script

I will not explain and let you find by yourself.

danicobos 10-27-2011 09:43 AM

You are right berbae! Your last post works perfectly.

Once again thank you, and also thanks to colucix!

All times are GMT -5. The time now is 11:58 AM.