在linux下访问awk外的变量

时间:2014-05-29 09:24:57

标签: linux shell awk ksh

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。

1 个答案:

答案 0 :(得分:0)

你混淆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 shell中

VARNAME=$( command )

运行命令并将环境变量VARNAME设置为运行命令的输出。

重要说明:使用source而不是执行来设置shell脚本中的变量

请注意,如果您将其粘贴在br.shchmod 700 br.sd中,您可能会尝试使用./br.sh来运行它,它会运行它,但它会设置shell变量{{1}在生成的临时子进程中,而不是调用父进程。在这种情况下,父级将$br为空。要在父级中设置$br,您必须使用$br运行命令文件,而不是直接执行它。