pbsnodes 和 bash 字符串匹配

pbsnodes and bash string matching

我有一个形式为“8, 14-24, 30-45, 9”的字符串,它是 pbsnodes 输出的子字符串。这显示了给定节点上正在使用的内核,其中 14-24 是正在使用的内核范围。

我想知道这个字符串中正在使用的内核总数,即 1 + (24 - 14 + 1) + (45 - 30 + 1 )+ 1 在本例中,使用 bash 脚本。

非常感谢任何建议或帮助。

迈克尔

您可以使用纯 bash 技术来实现此目的。通过将字符串读取到数组并使用 $((..)) 运算符执行算术运算符。你可以直接在命令行上运行这些命令,

IFS=", " read -ra numArray <<<"8, 14-24, 30-45, 9"

unset count
for word in "${numArray[@]}"; do
   (( ${#word} == 1 )) && ((++count)) || count=$(( count +  ${word#*-} - ${word%-*} + 1  ))
done

printf "%s\n" "$count"

想法是

  • read-aIFS设置的分隔符上拆分字符串读入数组numArray
  • 在每个元素上循环,对于每个元素,如果元素只是单个字符,只需将总计数增加 1
  • 对于数值范围,进行操作,例如对于数字 a-b 使用 参数扩展 语法 ${word#*-}${word%-*} 分别提取 ba 并执行 b-a+1 并添加已计算的 count 并在循环后打印元素

  • 您可以将其放入 bash 脚本中,并将 she-bang 设置为 #!/bin/bash 和 运行 脚本或 运行 直接来自命令行