Извлечение команды Ubuntu Sensors с использованием скриптов - PullRequest
0 голосов
/ 02 октября 2018

этот вопрос является продолжением Извлечение и обработка информации о температуре GPUT с использованием Regexp

В основном я хочу извлечь информацию о температуре графических процессоров с помощью команды датчиков и сценариев, таких как gawk и bash.

Пример вывода датчиков будет выглядеть следующим образом:

amdgpu-pci-0c00
Adapter: PCI adapter
fan1:        1972 RPM
temp1:        +50.0°C  (crit =  +0.0°C, hyst =  +0.0°C)

amdgpu-pci-0600
Adapter: PCI adapter
fan1:        1960 RPM
temp1:        +47.0°C  (crit =  +0.0°C, hyst =  +0.0°C)

amdgpu-pci-0200
Adapter: PCI adapter
fan1:        1967 RPM
temp1:        +52.0°C  (crit =  +0.0°C, hyst =  +0.0°C)

pch_skylake-virtual-0
Adapter: Virtual device
temp1:        +33.0°C

amdgpu-pci-0900
Adapter: PCI adapter
fan1:        1893 RPM
temp1:        +51.0°C  (crit =  +0.0°C, hyst =  +0.0°C)

amdgpu-pci-0300
Adapter: PCI adapter
fan1:        1992 RPM
temp1:        +53.0°C  (crit =  +0.0°C, hyst =  +0.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +24.0°C  (high = +80.0°C, crit = +100.0°C)
Core 0:        +23.0°C  (high = +80.0°C, crit = +100.0°C)
Core 1:        +21.0°C  (high = +80.0°C, crit = +100.0°C)

Я хочу напечатать каждый графический процессор с его меткой и температурой, основываясь на возрастающем порядке идентификатора шины.Например, на основании предыдущего вывода первый GPU, GPU0, будет с меткой amdgpu-pci-0200, GPU1 будет amdgpu-pci-0300, пока последний GPU4 не будет amdgpu-pci-0c00.Это исключает coretemp-isa-0000, так как это не графический процессор.Независимо от того, является ли идентификатор шины последовательным или пропущенным, я хочу пометить его в порядке возрастания.

Следующий bash-код извлечет все временные значения графического процессора без правильной сортировки.

#!/bin/bash

while [ 1 ]
do
        temp=( $( sensors | IFS=$'\n' gawk 'BEGIN{ RS="\n\n"} { if($0 ~ /amdgpu/) print $0 }' | gawk 'BEGIN{ FS="[+.]" } { if($1 ~ /temp1:/) print $2 }' ))   
        let j=0
        for i in "${temp[@]}"
        do
                echo -en  "GPU $j temp is $i \r "
                j=$(($j +1))
                sleep 1
        done
done

Как мне разобраться?

касательно

1 Ответ

0 голосов
/ 02 октября 2018

Вы не предоставили фактический ожидаемый результат или не предоставили некоторые детали о том, как анализировать входные данные, так что это немного догадка, но это может быть то, что вы ищете:

$ cat tst.sh
#!/bin/env bash

#while :
#do
    cat file |
    gawk '
        BEGIN { RS="" }
        $1 ~ /amdgpu/ {
            temp = "N/A"
            for (i=1; i<NF; i++) {
                if ($i == "temp1:") {
                    temp = gensub(/^[^0-9]*([0-9]+).*/,"\\1",1,$(i+1))
                }
            }
            temps[$1] = temp
        }
        END {
            PROCINFO["sorted_in"] = "@ind_str_asc"
            for (id in temps) {
                print "GPU" (++cnt), id, temps[id]
            }
        }
    '
    #sleep 1
#done

$ ./tst.sh
GPU1 amdgpu-pci-0200 52
GPU2 amdgpu-pci-0300 53
GPU3 amdgpu-pci-0600 47
GPU4 amdgpu-pci-0900 51
GPU5 amdgpu-pci-0c00 50

Просто измените cat file на sensors и раскомментируйте строки, чтобы активировать бесконечный цикл (при условии, что у вас есть причина для этого), когда вас это устраивает.

В приведенном выше примере используется GNU awk дляgensub () и sorted_in.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...