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