gpt4 book ai didi

bash - 如何将变量从 awk 传递到 shell

转载 作者:行者123 更新时间:2023-11-29 09:51:50 26 4
gpt4 key购买 nike

如何将变量从 awk 传递到 shell,例如

#!/bin/sh

cat in_arp | awk 'BEGIN{FS = "[: ]+"; arp_nr = 0} {
if(NR == 2) {
printf("%s\n", $3)
arp_nr = $3 #get this variable
}
else if(NR >= 5)
printf("%s\n", $1)
}'

cat in_route | awk 'BEGIN{FS = "[: ]+"; route_nr = 0} {
if($1 == "Total")
printf("%s\n", $4)
else if(NR >= 3) {
printf("%s\n", $1)
route_nr = $1 #get this variable
}
}' | tac

echo $arp_nr, $route_nr # what i want are these two variables

我想比较 arp_nr 和 route_nr,但是如何将这两个变量从 awk 获取到 shell,以便我可以比较它们。在上面的代码中,echo $arp_nr, $route_nr 没有返回

最佳答案

AWK 变量不是 shell 变量。即使您将变量设为环境变量,AWK 也会为 AWK 子进程设置它们,而不是为其父进程(您的脚本)设置它们。

一种方法是将 AWK 变量写入文件并在 shell 中读取该文件。使用 AWK,你可以做 print arp_nr > "arp_nr.var" ,并在运行 awk 之后,在您的脚本中执行 arp_nr=$(cat arp_nr.var) .

您还可以使用 printf("arp_nr=%s", arp_nr) >> "my_vars.sh" 将所有变量输出到同一个文件中(与 route_nr 相同)然后简单地运行 source my_vars.sh在你的 shell 里。但是,在这种情况下,由于您运行 source ,如果攻击者可以创建文件 my_vars.sh,则可能存在安全风险,因为那样你就会运行攻击者放入其中的所有内容。考虑使用 mktemp而不是硬编码的文件名。 mktemp确保没有人在您之前创建该文件。

关于bash - 如何将变量从 awk 传递到 shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38262285/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com