GNU/Linux >> Linux Esercitazione >  >> Linux

Colora l'output dei sensori?

Uso sensors per tenere d'occhio le temperature della CPU sulla console. Questo fa parte dell'output:

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)

Vorrei "colorare" questo output. In particolare, se le temperature sono al di sopra di una certa soglia, vorrei che fossero visualizzate in rosso. Quindi, ad esempio, supponiamo che la soglia sia 60, quindi qualsiasi occorrenza di +60.0°C , +61.0°C , +62.0°C , e così via dovrebbero essere in rosso (idealmente, vorrei un livello arancione e un livello rosso basati su due soglie diverse, ma anche una soluzione a un livello sarebbe ottima). Idealmente, questo dovrebbe funzionare anche con i watch sensors .

Risposta accettata:

Utilizzo: sensors | ./color_sensors.awk

Utilizzo con l'orologio: 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; }

Risultato:


Linux
  1. Intercetta input e output da un eseguibile specifico?

  2. Rimuovere la ridondanza dalle colonne di output?

  3. Come ottenere l'output da gdb.execute in PythonGDB (GDB 7.1)?

  4. Esecuzione di un comando linux da python

  5. MYSQL differisce nell'output dallo script

Ccat:colora l'output del comando Cat

Come vedere l'output di uno script PHP?

Colora l'output della coda

Come reindirizzare l'output da grep a cp?

Riga di comando:estrai la sottostringa dall'output

grep output da lungo a largo