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
和-a
在IFS
设置的分隔符上拆分字符串读入数组numArray
- 在每个元素上循环,对于每个元素,如果元素只是单个字符,只需将总计数增加
1
对于数值范围,进行操作,例如对于数字 a-b
使用 参数扩展 语法 ${word#*-}
和 ${word%-*}
分别提取 b
和 a
并执行 b-a+1
并添加已计算的 count
并在循环后打印元素
您可以将其放入 bash
脚本中,并将 she-bang 设置为 #!/bin/bash
和 运行 脚本或 运行 直接来自命令行
我有一个形式为“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
和-a
在IFS
设置的分隔符上拆分字符串读入数组numArray
- 在每个元素上循环,对于每个元素,如果元素只是单个字符,只需将总计数增加
1
对于数值范围,进行操作,例如对于数字
a-b
使用 参数扩展 语法${word#*-}
和${word%-*}
分别提取b
和a
并执行b-a+1
并添加已计算的count
并在循环后打印元素您可以将其放入
bash
脚本中,并将 she-bang 设置为#!/bin/bash
和 运行 脚本或 运行 直接来自命令行