GNU/Linux >> Belajar Linux >  >> Linux

Mewarnai Output Dari Sensor?

Saya menggunakan sensors untuk mengawasi suhu CPU di konsol. Ini adalah bagian dari 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)

Saya ingin 'mewarnai' hasil ini. Secara khusus, jika suhu berada di atas ambang batas tertentu, saya ingin mereka ditampilkan dengan warna merah. Jadi, misalnya, misalkan ambangnya adalah 60, maka setiap kejadian +60.0°C , +61.0°C , +62.0°C , dan seterusnya harus berwarna merah (idealnya, saya ingin level oranye dan level merah berdasarkan dua ambang batas yang berbeda, tetapi solusi satu level juga bagus). Idealnya, ini juga harus bekerja dengan watch sensors .

Jawaban yang Diterima:

Penggunaan: sensors | ./color_sensors.awk

Penggunaan dengan jam tangan: 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; }

Hasil:


Linux
  1. Linux – Kolom Buffer Di Keluaran Dari Gratis?

  2. Mencegat Input Dan Output Dari Executable Tertentu?

  3. Bagaimana Mencegah `ls` Dari Menyortir Output?

  1. Menghapus Redundansi Dari Kolom Keluaran?

  2. Menjalankan skrip Python dari PHP

  3. Bagaimana cara menyalurkan output dari grep ke cp?

  1. Jadikan Ls Bedakan Script Dari Biner Di Output?

  2. Mengapa Ls -l Menghasilkan Ukuran Yang Berbeda Dari Ls -s?

  3. Baris perintah:Ekstrak substring dari output