我有一个 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_awk
from中使用变量/数组定义second_awk
。
但是,如果你尝试
awk -f first_awk ...
/bin/ls
awk -f second_awk ...
second_awk
无法知道first_awk 调用期间使用的变量/数组。
每个 awk 调用都会创建一个新进程,该进程在运行结束时被丢弃。