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