使用 BusyBox 将 2 行合并为 key=value 字符串

Merging 2 rows into key=value string with BusyBox

我需要为嵌入式 linux 编写一个 sh 脚本,它只有 BusyBox (v1.30.1)。我可以使用“sh”、“awk”或“sed”。

我有一个接收 2 个变量的脚本:

columns="usr sys nic idle io irq sirq"
points="2.2 4.5 0.0 93.1 0.0 0.0 0.0"

两个变量都可以有任意数量的测量值(从 1 到 ~15)。

我需要将它们组合起来得到一个 3' 变量:

payload="usr=2.2, sys=4.5, nic=0.0, idle=93.1, io=0.0, irq=0.0, sirq=0.0"

Sh 不支持数组,所以我无法遍历“列”和“点”。有什么方法可以在 sh 脚本中(理想情况下)或使用 BusyBox 中可用的外部命令来完成此任务?

编辑:根据 James Brown 的要求添加了我尝试过的内容(显然它不起作用,因为 sh 不支持数组):

for index in ${!columns[*]}; do 
  payload="${payload} ${columns[$index]}=${points[$index]}"
done

使用Busybox awk:

$ payload=$(busybox awk -v c="$columns" -v p="$points" '
BEGIN {
    n=split(c,cc)
    m=split(p,pp)
    if(m==n)
        for(i=1;i<=n;i++)
            printf "%s=%s%s",cc[i],pp[i],(i==n?ORS:", ")
}')
$ echo $payload
usr=2.2 sys=4.5 nic=0.0 idle=93.1 io=0.0 irq=0.0 sirq=0.0