LINUX.ORG.RU

Выводить информацию от sensors в 4 столба

 


0

1

Как пример, который нужен мне часто, командой sensors | grep Core | cut -d ( -f 1 вывожу информацию о температуре Х ядер 2 процессоров в таком виде:

Core 0: +39.0°C
Core 2: +38.0°C
Core 3: +36.0°C
Core 4: +38.0°C
Core 5: +37.0°C
Core 6: +39.0°C
Core 8: +40.0°C
Core 9: +38.0°C
Core 0: +42.0°C
Core 2: +41.0°C
Core 3: +39.0°C
Core 4: +40.0°C
Core 5: +39.0°C
Core 6: +42.0°C
Core 8: +38.0°C

Мне нужно выводить раздельно от каждого процессора, в 4 столбца, например:

CPU0_____________CPU1

Core 0: +39.0°C Core 0: +42.0°C

Core 2: +38.0°C Core 2: +41.0°C

Пока что не очень рублю в awk и sed по этому нихрена с помощью них и гугления не получилось сделать искомое. Попробовал командой column поиграть, она выводит приятнее но в 10 столбцов…



Последнее исправление: sin4ez (всего исправлений: 3)

Пока что не очень рублю в awk и sed по этому нихрена с помощью них и гугления не получилось сделать искомое.

Так как awk наиболее похож на язык, который просто и наглядно переводит готовый алгоритм в программу, то обычно так говорят, когда нет у вопрошающего никакого алгоритма и гуглил он готовое решение.

vodz ★★★★★
()
$ cat cpu
Core 0: +39.0°C
Core 1: +39.0°C
Core 2: +38.0°C
Core 3: +36.0°C
Core 4: +38.0°C
Core 5: +37.0°C
Core 6: +39.0°C
Core 8: +40.0°C
Core 9: +38.0°C
Core 0: +42.0°C
Core 1: +38.0°C
Core 2: +41.0°C
Core 3: +39.0°C
Core 4: +40.0°C
Core 5: +39.0°C
Core 6: +42.0°C
Core 8: +38.0°C
Core 9: +38.0°C
$ cat cpu | sort | awk '{if(FNR%2)printf "%s \t",$0; else print $0}'
Core 0: +39.0°C 	Core 0: +42.0°C
Core 1: +38.0°C 	Core 1: +39.0°C
Core 2: +38.0°C 	Core 2: +41.0°C
Core 3: +36.0°C 	Core 3: +39.0°C
Core 4: +38.0°C 	Core 4: +40.0°C
Core 5: +37.0°C 	Core 5: +39.0°C
Core 6: +39.0°C 	Core 6: +42.0°C
Core 8: +38.0°C 	Core 8: +40.0°C
Core 9: +38.0°C 	Core 9: +38.0°C
iron ★★★★★
()
Последнее исправление: iron (всего исправлений: 1)

Пример текста:

Core 0:        +43.0°C  (high = +85.0°C, crit = +95.0°C)
Core 1:        +43.0°C  (high = +85.0°C, crit = +95.0°C)
Core 2:        +41.0°C  (high = +85.0°C, crit = +95.0°C)
Core 3:        +44.0°C  (high = +85.0°C, crit = +95.0°C)
Core 4:        +42.0°C  (high = +85.0°C, crit = +95.0°C)
Core 5:        +48.0°C  (high = +85.0°C, crit = +95.0°C)
Core 8:        +45.0°C  (high = +85.0°C, crit = +95.0°C)
Core 9:        +45.0°C  (high = +85.0°C, crit = +95.0°C)
Core 10:       +43.0°C  (high = +85.0°C, crit = +95.0°C)
Core 11:       +48.0°C  (high = +85.0°C, crit = +95.0°C)
Core 12:       +42.0°C  (high = +85.0°C, crit = +95.0°C)
Core 13:       +44.0°C  (high = +85.0°C, crit = +95.0°C)
Core 0:        +43.0°C  (high = +85.0°C, crit = +95.0°C)
Core 1:        +43.0°C  (high = +85.0°C, crit = +95.0°C)
Core 2:        +41.0°C  (high = +85.0°C, crit = +95.0°C)
Core 3:        +44.0°C  (high = +85.0°C, crit = +95.0°C)
Core 4:        +42.0°C  (high = +85.0°C, crit = +95.0°C)
Core 5:        +48.0°C  (high = +85.0°C, crit = +95.0°C)
Core 8:        +45.0°C  (high = +85.0°C, crit = +95.0°C)
Core 9:        +45.0°C  (high = +85.0°C, crit = +95.0°C)
Core 10:       +43.0°C  (high = +85.0°C, crit = +95.0°C)
Core 11:       +48.0°C  (high = +85.0°C, crit = +95.0°C)
Core 12:       +42.0°C  (high = +85.0°C, crit = +95.0°C)
Core 13:       +44.0°C  (high = +85.0°C, crit = +95.0°C)

Команда:

cat /tmp/sensors.txt | grep Core | awk '{print $1" "$2" "$3}' | pr --columns 2

Вывод:

Core 0: +43.0°C                     Core 0: +43.0°C
Core 1: +43.0°C                     Core 1: +43.0°C
Core 2: +41.0°C                     Core 2: +41.0°C
Core 3: +44.0°C                     Core 3: +44.0°C
Core 4: +42.0°C                     Core 4: +42.0°C
Core 5: +48.0°C                     Core 5: +48.0°C
Core 8: +45.0°C                     Core 8: +45.0°C
Core 9: +45.0°C                     Core 9: +45.0°C
Core 10: +43.0°C                            Core 10: +43.0°C
Core 11: +48.0°C                            Core 11: +48.0°C
Core 12: +42.0°C                            Core 12: +42.0°C
Core 13: +44.0°C                            Core 13: +44.0°C

Поиграйся с параметрами, может что выйдет.

vvn_black ★★★★★
()
Ответ на: комментарий от iron

У вас sort строки переставляет, ″Сore 1″ от ″CPU 1″ стало ″CPU 0″.

Не помню, если sort указать по каким полям сортировать, гарантируется ли, что строки с одинаковыми значениями ключа будут выведены в порядке поступления.

mky ★★★★★
()
Ответ на: комментарий от mky

У вас sort строки переставляет

Спасибо за поправку, действительно.

Вот фикс:

$ cat cpu | sort -k 2 -h -s | awk '{if(FNR%2)printf "%s \t",$0; else print $0}'
Core 0: +39.0°C 	Core 0: +42.0°C
Core 1: +39.0°C 	Core 1: +38.0°C
Core 2: +38.0°C 	Core 2: +41.0°C
Core 3: +36.0°C 	Core 3: +39.0°C
Core 4: +38.0°C 	Core 4: +40.0°C
Core 5: +37.0°C 	Core 5: +39.0°C
Core 6: +39.0°C 	Core 6: +42.0°C
Core 8: +40.0°C 	Core 8: +38.0°C
Core 9: +38.0°C 	Core 9: +38.0°C

iron ★★★★★
()
Ответ на: комментарий от sin4ez

Можно даже без awk:

cat cpu | sort -k 2 -h -s | xargs -L2 | sed 's/C C/C\t\tC/'
Core 0: +39.0°C         Core 0: +42.0°C
Core 1: +39.0°C         Core 1: +38.0°C
Core 2: +38.0°C         Core 2: +41.0°C
Core 3: +36.0°C         Core 3: +39.0°C
Core 4: +38.0°C         Core 4: +40.0°C
Core 5: +37.0°C         Core 5: +39.0°C
Core 6: +39.0°C         Core 6: +42.0°C
Core 8: +40.0°C         Core 8: +38.0°C
Core 9: +38.0°C         Core 9: +38.0°C
iron ★★★★★
()
dron@gnu:~$ cat c.txt 
Core 0: +39.0°C
Core 1: +39.0°C
Core 2: +38.0°C
Core 3: +36.0°C
Core 4: +38.0°C
Core 5: +37.0°C
Core 6: +39.0°C
Core 8: +40.0°C
Core 9: +38.0°C
Core 0: +42.0°C
Core 1: +38.0°C
Core 2: +41.0°C
Core 3: +39.0°C
Core 4: +40.0°C
Core 5: +39.0°C
Core 6: +42.0°C
Core 8: +38.0°C
Core 9: +38.0°C
dron@gnu:~$ gcc ccc.c -o ~/.local/bin/c2t
dron@gnu:~$ cat c.txt | c2t 
Core 0: +39.0°C    Core 0: +42.0°C  
Core 1: +39.0°C    Core 1: +38.0°C  
Core 2: +38.0°C    Core 2: +41.0°C  
Core 3: +36.0°C    Core 3: +39.0°C  
Core 4: +38.0°C    Core 4: +40.0°C  
Core 5: +37.0°C    Core 5: +39.0°C  
Core 6: +39.0°C    Core 6: +42.0°C  
Core 8: +40.0°C    Core 8: +38.0°C  
Core 9: +38.0°C    Core 9: +38.0°C 
#include <stdio.h>
int main()
{
    int  cnt = 0;
    int  max = 64;
    char buff[2][64][64];
    int  id; float temp;
    while(scanf("Core %d: +%f°C\n",&id,&temp)==2)
    {
        if (buff[0][id][0]=='C')
        {
            sprintf(buff[1][id%max],"Core %d: +%.1f°C",id,temp);
        }else
            sprintf(buff[0][id%max],"Core %d: +%.1f°C",id,temp);
        }

    while(max--)
    {
        (buff[0][cnt][0]=='C')? printf("%s    ",buff[0][cnt]):0;
        (buff[1][cnt][0]=='C')? printf("%s  \n",buff[1][cnt]):0;cnt++;
    }
    return 0;
}
LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)