GNU/Linux >> Tutoriales Linux >  >> Linux

¿Colorear la salida de los sensores?

Uso sensors para vigilar las temperaturas de la CPU en la consola. Esto es parte de la salida:

coretemp-isa-0001
Adapter: ISA adapter
Physical id 1:  +45.0°C  (high = +80.0°C, crit = +90.0°C)
Core 0:         +39.0°C  (high = +80.0°C, crit = +90.0°C)
Core 1:         +39.0°C  (high = +80.0°C, crit = +90.0°C)
Core 2:         +40.0°C  (high = +80.0°C, crit = +90.0°C)
Core 3:         +38.0°C  (high = +80.0°C, crit = +90.0°C)
Core 4:         +40.0°C  (high = +80.0°C, crit = +90.0°C)
Core 8:         +39.0°C  (high = +80.0°C, crit = +90.0°C)
Core 9:         +38.0°C  (high = +80.0°C, crit = +90.0°C)
Core 10:        +38.0°C  (high = +80.0°C, crit = +90.0°C)
Core 11:        +39.0°C  (high = +80.0°C, crit = +90.0°C)
Core 12:        +39.0°C  (high = +80.0°C, crit = +90.0°C)

nouveau-pci-0200
Adapter: PCI adapter
GPU core:     +0.92 V  (min =  +0.92 V, max =  +1.00 V)
fan1:        2220 RPM
temp1:        +48.0°C  (high = +95.0°C, hyst =  +3.0°C)
                       (crit = +105.0°C, hyst =  +5.0°C)
                       (emerg = +135.0°C, hyst =  +5.0°C)

Me gustaría 'colorear' esta salida. En particular, si las temperaturas están por encima de cierto umbral, me gustaría que se muestren en rojo. Entonces, por ejemplo, digamos que el umbral es 60, entonces cualquier ocurrencia de +60.0°C , +61.0°C , +62.0°C , y así sucesivamente debería estar en rojo (idealmente, me gustaría un nivel naranja y un nivel rojo basado en dos umbrales diferentes, pero una solución de un nivel también sería excelente). Idealmente, esto también debería funcionar con watch sensors .

Respuesta aceptada:

Uso: sensors | ./color_sensors.awk

Uso con reloj: watch -c 'sensors | ./color_sensors.awk'

#!/usr/bin/awk -f

BEGIN {
    DEFAULT_COLOR = "\033[;m";
    RED           = "\033[1;31m";
    MAGENTA       = "\033[1;35m";

    # CPU_thresholds
    cpu_high = 60; 
    cpu_middle = 50; 

    # GPU_thresholds
    gpu_high = 80; 
    gpu_middle = 70; 
}

function colorize(temp, mid_trsh, high_trsh) {
    new_color = "";  

    temp_number = temp;
    gsub("[^0-9]","",temp_number);
    gsub(".$","",temp_number);

    if(temp_number >= high_trsh) 
        new_color = RED;
    else if (temp_number >= mid_trsh) 
        new_color = MAGENTA;

    return new_color temp DEFAULT_COLOR;
}

/Core/          { $3 = "\t" colorize($3, cpu_middle, cpu_high); }
/Physical id/   { $4 = "\t" colorize($4, cpu_middle, cpu_high); }
# Multiple spaces added for alignment here - "\t      ".
/temp1/         { $2 = "\t      " colorize($2, gpu_middle, gpu_high) " "; }
                { print; }

Resultado:


Linux
  1. ¿Por qué Ls -l produce un tamaño diferente de Ls -s?

  2. ¿Cómo extraer el tiempo de duración de la salida ffmpeg?

  3. ¿Cómo obtener resultados de gdb.execute en PythonGDB (GDB 7.1)?

  4. Ejecutando un comando de linux desde python

  5. Redirigir la salida de un bloque de funciones a un archivo en Linux

Ccat – Colorear la salida del comando Cat

¿Cómo evitar que `ls` ordene la salida?

¿Cómo ver la salida de un script PHP?

Colorear salida de cola

Ejecutar un script de Python desde PHP

¿Cómo canalizar la salida de grep a cp?