使用 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
我需要为嵌入式 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