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

How do you pass a parameter on awk command?

我试过了,但似乎不起作用。 请帮忙谢谢

 TEST_STRING= test

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

        }
    {
        print testString
        }
        END {}
    ' file2 

这里有两个问题:您实际上没有分配给 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

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