你如何在awk命令上传递一个参数?

时间:2015-02-12 14:21:46

标签: unix awk ksh

我尝试了这个,但它似乎不起作用。 请帮助谢谢

 TEST_STRING= test

    echo Starting awk command
    awk -v testString=$TEST_STRING'
        BEGIN {

        }
    {
        print testString
        }
        END {}
    ' file2 

1 个答案:

答案 0 :(得分:2)

这里有两个问题:您实际上并没有分配给TEST_STRING,而是在与变量值相同的参数中传递程序代码。这两个都是由空格和引用位于错误的地方引起的。


TEST_STRING= test

...不会为TEST_STRING分配值。相反,它运行命令test,将名为TEST_STRING的环境变量设置为空值。

也许你想要

TEST_STRING=test

TEST_STRING=' test'

......如果空白是故意的。


其次,使用-v将变量传递给awk,右侧应该是双引号,并且该值与要传递给awk(或其他值)的程序之间必须有不带引号的空格。也就是说:

awk -v testString=$TEST_STRING' BEGIN

...如果TEST_STRING不包含空格,请将BEGIN作为testString值的一部分传递,而不是单独的参数!

awk -v testString="$TEST_STRING" 'BEGIN
另一方面,

... on确保TEST_STRING的值作为testString=的相同参数的一部分传递,即使它包含空格 - 并确保BEGIN 1}}作为单独参数的一部分传递。