我有这个脚本,但我不知道如何获得打印输出中的最后一个元素:

cat /proc/cpuinfo | awk '/^processor/{print $3}'

最后一个元素应该是cpu数量减1。


当前回答

Fravadona的回答很好,也很正确,但它需要lscpu的存在。由于在需要物理核数的系统上不存在它,所以我试图提出一个只依赖于proc/cpuinfo的系统

cat /proc/cpuinfo | grep -B2 'core id' | sed 's/siblings。* / / | tr - d的[空间:]| sed的年代/——/ \ n / g | - u | wc - l

它工作得很完美,但不幸的是,它没有Fravadona的那么坚固,因为它会崩溃

/proc/cpuinfo中字段的名称或顺序发生变化 Grep将它插入的行分隔符(当前为——)替换为其他字符串。

但是,除此之外,它完美无缺:)

以下是对正在发生的一切的快速解释

grep -B2 'core id'

只获取我们感兴趣的行(即“core id”和前面的两行)

sed 's/siblings.*/'/

去掉“兄弟姐妹…”这一行

tr -d '[:space:]'

替换空格字符

sed 's/--/\n/'g

用换行符替换由grep插入的'——'字符

sort -u

按“物理id,核心id”分组

wc -l

数一下行数

作为一个完全的菜鸟,我对自己很满意。我从来没有想过我能够将所需的行连接在一起,以“physical id”和“core id”进行分组。这有点俗气,但很管用。

如果有任何专家知道如何简化这种混乱,请告诉我。

其他回答

grep -c ^processor /proc/cpuinfo

将计算在/proc/cpuinfo中以“processor”开头的行数

对于具有超线程的系统,可以使用

grep ^cpu\\scores /proc/cpuinfo | uniq |  awk '{print $4}'

它应该返回(例如)8(而上面的命令将返回16)

下面将给出超线程和非超线程系统上的“真实”内核数。至少它在我所有的测试中都有效。

awk -F: '/^physical/ && !ID[$2] { P++; ID[$2]=1 }; /^cpu cores/ { CORES=$2 };  END { print CORES*P }' /proc/cpuinfo

Fravadona的回答很好,也很正确,但它需要lscpu的存在。由于在需要物理核数的系统上不存在它,所以我试图提出一个只依赖于proc/cpuinfo的系统

cat /proc/cpuinfo | grep -B2 'core id' | sed 's/siblings。* / / | tr - d的[空间:]| sed的年代/——/ \ n / g | - u | wc - l

它工作得很完美,但不幸的是,它没有Fravadona的那么坚固,因为它会崩溃

/proc/cpuinfo中字段的名称或顺序发生变化 Grep将它插入的行分隔符(当前为——)替换为其他字符串。

但是,除此之外,它完美无缺:)

以下是对正在发生的一切的快速解释

grep -B2 'core id'

只获取我们感兴趣的行(即“core id”和前面的两行)

sed 's/siblings.*/'/

去掉“兄弟姐妹…”这一行

tr -d '[:space:]'

替换空格字符

sed 's/--/\n/'g

用换行符替换由grep插入的'——'字符

sort -u

按“物理id,核心id”分组

wc -l

数一下行数

作为一个完全的菜鸟,我对自己很满意。我从来没有想过我能够将所需的行连接在一起,以“physical id”和“core id”进行分组。这有点俗气,但很管用。

如果有任何专家知道如何简化这种混乱,请告诉我。

如果您只想计算物理内核,这个命令可以满足我的需要。

lscpu -e | tail -n +2 | tr -s " " | cut -d " " -f 4 | sort | uniq | wc -w

非常基本,但似乎是计算实际的物理内核,忽略了逻辑计数

使用awk计算每个“物理id”方法的“核心id”,如果“核心id”不可用,则返回“处理器”计数(如覆盆子)

echo $(awk '{ if ($0~/^physical id/) { p=$NF }; if ($0~/^core id/) { cores[p$NF]=p$NF }; if ($0~/processor/) { cpu++ } } END { for (key in cores) { n++ } } END { if (n) {print n} else {print cpu} }' /proc/cpuinfo)