2

我已经使用 Hugin 使用的命令行工具编写了一个批处理脚本来生成全景图。其中几个工具的一个有趣之处是它们允许多核使用,但必须在命令中标记此选项。

到目前为止我想出了什么:

#get the last fields of each line in the file, initialize the line counter
results=$(more /proc/cpuinfo | awk '{print ($NF)}')
count=0

#loop through the results till the 12th line for cpu core count
for result in $results; do
  if [ $count == 12 ]; then
    echo "Core Count: $result"
  fi
  count=$((count+1))
done

有没有更简单的方法来做到这一点?

4

6 回答 6

2

result=$(awk 'NR==12{print $NF}' /proc/cpuinfo)

于 2012-06-27T14:17:14.623 回答
2

要回答有关获取第一/最后这么多行的问题,您可以使用headand tail,例如:

cat /proc/cpuinfo | awk '{print ($NF)}' | head -12 | tail -1

但是,与其搜索第 12 行,不如从语义上搜索任何包含核心的行。例如,某些机器可能有多个内核,因此您可能需要对结果求和:

cat /proc/cpuinfo | grep "cores" | awk '{s+=$NF} END {print s}'
于 2012-06-27T14:18:55.507 回答
2
count=$(getconf _NPROCESSORS_ONLN)

请参阅getconf(1)sysconf(3) 常量

根据 Linux 手册页,_SC_NPROCESSORS_ONLN“可能不是标准的”。我的猜测是这需要 glibc 甚至是专门的 Linux 系统。如果这不起作用,我可能会考虑/sys/class/cpuid(也许有更好的东西?) over parsing /proc/cpuinfo。以上都不是完全可移植的。

于 2012-06-27T14:29:52.507 回答
1

有很多方法:

head -n 12 /proc/cpuinfo | tail -1 | awk -F: '{print $2}'
grep 'cpu cores' /proc/cpuinfo | head -1 | awk -F: '{print $2}'

等等。

但我必须注意,您只获取第一部分的信息/proc/cpuinfo,我不确定这是否是您所需要的。

于 2012-06-27T14:18:50.613 回答
0

如果 cpuinfo 改变它的格式 ;) ?也许这样的事情会更好:

cat /proc/cpuinfo|sed -n 's/cpu cores\s\+:\s\+\(.*\)/\1/p'|tail -n 1

并确保对核心求和。我的有 12 或 16 个;)

于 2012-06-27T14:27:28.563 回答
0

不确定您要做什么以及为什么上面所说的 ormaaj 也不起作用。根据您的描述,我的直觉会更简单。

grep processor /proc/cpuinfo  | wc -l
于 2012-06-27T16:29:58.903 回答