我可以在后续 awk 脚本中访问在一个 awk 脚本中创建的数组吗?

我可以在后续 awk 脚本中访问在一个 awk 脚本中创建的数组吗?

我有一个 shell 脚本,其中有 2 个 awk 字符串。

first_awk='
BEGIN {
}
{
# create some array here..
}
END{
}
'



second_awk='
BEGIN {
}
{

## Access the array created in first awk section.
}
END{
}
'

是否可以做类似上面的事情?在后面的 awk 部分中访问在第一个 awk 部分中创建的数组?

或者,我可以在封闭的 shell 脚本中声明一个数组并在 awk 字符串中访问该数组吗?

答案1

如果将 awk 代码位分配给 shell 变量,然后将这些变量组合起来创建一个程序,并提供给 awk 的单次调用,那么您就可以从一个变量中访问另一个中创建的数组。然而,它看起来更像是您正在创建单独的 awk 程序以供单独调用 awk。在这种情况下,传递给一个 awk 的代码将不知道传递给另一个 awk 的代码(包括数组声明)。

答案2

在我看来,如果你尝试

awk -f first_awk -f second_awk ...

awk 文件将根据调用顺序“合并”。您可以在first_awkfrom中使用变量/数组定义second_awk

但是,如果你尝试

awk -f first_awk ...
/bin/ls
awk -f second_awk ...

second_awk无法知道first_awk 调用期间使用的变量/数组。

每个 awk 调用都会创建一个新进程,该进程在运行结束时被丢弃。

相关内容