Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unix 如何在awk命令上传递参数?_Unix_Awk_Ksh - Fatal编程技术网

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

Unix 如何在awk命令上传递参数?,unix,awk,ksh,Unix,Awk,Ksh,我试过这个,但似乎不起作用。 请帮忙,谢谢 TEST_STRING= test echo Starting awk command awk -v testString=$TEST_STRING' BEGIN { } { print testString } END {} ' file2 这里有两个问题:您实际上没有分配给TEST\u STRING,并且您正在以与变量值相同的参

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

 TEST_STRING= test

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

        }
    {
        print testString
        }
        END {}
    ' file2 

这里有两个问题:您实际上没有分配给
TEST\u STRING
,并且您正在以与变量值相同的参数传递程序代码。这两种情况都是由于空格和引用出现在错误的位置造成的


…未将值分配给
测试字符串
。相反,它运行命令
test
,将名为
test\u STRING
的环境变量设置为空值

也许相反,你想要

TEST_STRING=test

…如果空白是故意的


第二,使用
-v
将变量传递给awk时,右边应该用双引号引起来,并且该值和要传递给awk的程序(或其他值)之间必须有无引号的空格。也就是说:

awk -v testString=$TEST_STRING' BEGIN
…如果
TEST\u STRING
不包含空格,则将
BEGIN
作为
testString
值的一部分传递,而不是作为单独的参数

awk -v testString="$TEST_STRING" 'BEGIN

…另一方面,确保将
TEST\u STRING
的值作为与
testString=
相同的参数的一部分传递,即使它包含空格——并确保将
BEGIN
作为单独参数的一部分传递。

正确语法为
awk-v testString=“$TEST\u STRING””BEGIN{…
。此外,如果你想让作业起作用,那么作业中不能有空格--
test\u string=test
,或者如果你真的想要前导空格,那么作业中不能有空格。另外,一般来说,当你说“不起作用”时,最好准确地描述它是如何失败的。(顺便说一句,shell中的所有caps变量名都是按约定为环境变量和内置变量保留的;其他变量名应至少有一个小写字符。遵循此做法可防止命名空间冲突)谢谢!多个参数如何?awk-v testString=$TEST\u STRING'testString2=$TEST\u STRING2BEGIN@PhilipMorris,具有多个
-v
参数:
-v testString=“$test\u string”-v testString2=“$test\u string2”
如果我将其传递给awk命令中的正则表达式,正则表达式是否读取值或参数名称?在awk脚本中引用正则表达式的方法不止一种。如果使用关系表达式(
~
!~
)并在右侧取消引用变量,而不是常量正则表达式(
/foo/
),然后您就可以将传入的变量视为正则表达式。@PhilipMorris,…给您一个更具体的例子:
awk-v'ext=gem'$0~ext{print}'
。也就是说,您在那里提出的问题应该是它自己的问题;我们离最初的主题已经很远了。
awk -v testString=$TEST_STRING' BEGIN
awk -v testString="$TEST_STRING" 'BEGIN