Unix awk getline不接受文件中的外部变量

Unix awk getline不接受文件中的外部变量,unix,awk,Unix,Awk,我有一个文件test.sh,从中执行以下awk命令 awk -f x.awk < result/output.txt >>difference.txt 即使在执行test.sh文件时,脚本也会在下面的一行停止 awk -f x.awk < result/output.txt >>difference.txt awk不是shell,就像C不是shell一样。您不应该期望能够访问awk程序中的shell变量,就像您不能访问C程序中的shell变量一样 要将

我有一个文件test.sh,从中执行以下awk命令

awk -f x.awk < result/output.txt  >>difference.txt
即使在执行test.sh文件时,脚本也会在下面的一行停止

awk -f x.awk < result/output.txt  >>difference.txt

awk不是shell,就像C不是shell一样。您不应该期望能够访问awk程序中的shell变量,就像您不能访问C程序中的shell变量一样

要将shell变量的值传递给awk脚本,请参阅以了解详细信息,但本质上是:

awk -v awkvar="$shellvar" '{ ... use awkvar ...}'
这通常是正确的方法


话虽如此,无论你想做什么,看起来都是错误的做法。如果您正在考虑使用getline,请务必先阅读并理解所有的注意事项,但如果您告诉我们您试图对示例输入和预期输出做什么,我们几乎可以肯定地帮助您找到与getline无关的更好方法。

awk脚本由
awk
读取,没有被贝壳碰过。在
awk
脚本中,
$bld
表示“由变量
bld
中的数字指定的字段”(即
awk
变量
bld

您可以在命令行上设置
awk
变量(正式使用
-v
选项):


什么是result/output.txt?它包含哪些数据?在应用/操作之前,首先检查两个数据。我认为数据没有任何问题。因为,如果我像while(getline-1。如果您正在考虑使用getline,请务必阅读并充分理解所有的注意事项、适当的用法和相对安全的语法。@EdMorton:您是对的-我正在处理问题的其他方面,而不是
getline
测试的细节-这只是一个借口。请使用它而不是awk.info。
awk -f x.awk < result/output.txt  >>difference.txt
awk: x.awk:4: (FILENAME=- FNR=116) fatal: division by zero attempted
 error.
awk -v awkvar="$shellvar" '{ ... use awkvar ...}'
awk -v bld="$bld" -v dev="$DeviceType" -f x.awk < result/output.txt >> difference.txt
BEGIN { file = sprintf("result/%s/%s", bld, dev); }
{ while ((getline < file) > 0) print }