Как извлечь количество физических процессоров и потоков на ядро? (Нет текста, только число, которое будет использоваться в качестве входных данных в другом месте)

perl -F'\s+' -lane '$,="\t"; # OFS made a TAB
   my($gN, $gL) = splice @F, 0, 2; # store gene name & length
   print $gN, $gL, map { sprintf "%.5e", $F[$_] / ( $F[$_+@F/2] * $gL ) } 0 .. @F/2-1;
' gene_samples.file

  • FSсодержит один или несколько пробелов.
  • ORS = RS = \n
  • @Fсодержит поля для данной записи.
  • spliceотделяет 2 элемента, начиная со смещения 0, а также уменьшает размер массива.
  • Из спецификации OP из того, что осталось в @F, есть четные элементы. Первая половина — это counts_for_each_sample, а вторая половина — total_count_for_each_sample.

Результаты

A1BG      1758  6.55307e-10  5.67278e-08  3.73151e-09
A1BG-AS1  2126  5.11204e-11  9.43963e-10  1.78875e-10
A1CF      9695  1.99136e-08  8.28471e-09  1.42845e-09
A2M       5399  6.42672e-08  5.20606e-08  4.24207e-08
A2M-AS1   6660  1.63186e-10  1.12999e-10  1.71301e-10
1
25.06.2017, 14:06
2 ответа

Мы могли бы использовать awkили sedили даже grepс регулярными выражениями Perl, чтобы выбрать только число из этой строки, например.

$ lscpu | sed -n 's/^Core(s) per socket: *//p'
2

А вам нужно это число, количество ядер в одном сокете? Что делать, если у вас более одного сокета на машине:

$ lscpu |grep -i socket
Core(s) per socket:    2
Socket(s):             2

Мы могли бы использовать awk, чтобы получить оба числа и умножить их:

$ lscpu | awk '/^Core.s. per socket:/ {cores=$NF} /^Socket.s.:/ {sockets=$NF} END {print cores * sockets}'
4

Я не уверен, считают ли они гиперпотоки или нет, и нужны ли нам гиперпотоки или нет, но мы могли бы просто получить число в строке CPU(s):

lscpu | awk '/^CPU.s.:/ { print $NF; exit }'

Или используйте nproc, чтобы получить общее количество процессоров в системе.

$ nproc --all
4 
3
27.01.2020, 23:14

Для этого можно использовать утилиту getconf. Это должно сработать для вас

$ getconf _NPROCESSORS_ONLN
8
3
27.01.2020, 23:14

Теги

Похожие вопросы