file= input.txt
br=0
awk -v 'BEGIN{FS=";"}
{
for(i=1;i<=NF;i++)
{
print $i
br = NF
}
}'<$file
print "value of br " $br
我将NF的值存储在br中,以便在脚本中进一步使用它。在我的例子中,NF的值是10,但在br中,我得到的是0。
发布于 2014-05-29 01:31:06
您混淆了shell脚本和awk,它们是不同的程序/解释器。
在awk
中发生的事情将留在awk
中。
您能做的最好的就是打印一个字符串到shell。
我注意到我不需要-v
标记,并且用-F
标记代替了设置FS
。
在您的例子中,您可以在awk中使用end指令,它只在末尾运行。
file= input.txt
br=0
gawk -F; '
{
for(i=1;i<=NF;i++)
{
print $i
br = NF
}
}
END { print "final value of br:"br } '<$file
如果在名为br的shell环境变量中需要这个数字,可以这样做:
file= input.txt
br=$( gawk -F; '
{
for(i=1;i<=NF;i++)
{
br = NF
}
}
END { print br } '<$file
)
它是如何工作的
在bash壳
VARNAME=$( command )
运行该命令,并将环境变量VARNAME
设置为运行该命令的输出。
注意:使用源代码而不是执行来设置shell脚本中的变量。
请注意,如果将其放在br.sh
和chmod 700 br.sd
中,您可能会倾向于使用将运行它的./br.sh
来运行它,但它将在生成的临时子进程中设置shell变量$br
,而不是调用父进程。在这种情况下,父类将使$br
为空。要使$br
设置在父文件中,必须使用source br.sh
运行命令文件,而不是直接执行它。
https://stackoverflow.com/questions/23929977
复制