I want to highlight the Use% column if it reaches above 80. Any color is fine but I want it with full output.

Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               6.3G     0  6.3G   0% /dev
tmpfs                  6.3G  4.0K  6.3G   1% /dev/shm
tmpfs                  6.3G  1.1G  5.2G  18% /run
tmpfs                  6.3G     0  6.3G   0% /sys/fs/cgroup
/dev/mapper/os-root    9.5G  7.1G  2.0G  79% /
/dev/mapper/os-var      60G   37G   21G  65% /var
/dev/mapper/os-varlog   15G   11G  3.4G  77% /var/log
/dev/vda3              197M  173M   25M  88% /boot
tmpfs                  1.3G     0  1.3G   0% /run/user/0

For example, in my case,

Filesystem             Size  Used Avail Use% Mounted on
devtmpfs               6.3G     0  6.3G   0% /dev
tmpfs                  6.3G  4.0K  6.3G   1% /dev/shm
tmpfs                  6.3G  1.1G  5.2G  18% /run
tmpfs                  6.3G     0  6.3G   0% /sys/fs/cgroup
/dev/mapper/os-root    9.5G  7.1G  2.0G  79% /
/dev/mapper/os-var      60G   37G   21G  65% /var
/dev/mapper/os-varlog   15G   11G  3.4G  77% /var/log
**/dev/vda3              197M  173M   25M  88% /boot** -->* 88% color should change here.*
tmpfs                  1.3G     0  1.3G   0% /run/user/0

is it possible? or not? please help me guys. Sorry for my bad English.

推荐答案

您可以这样做:

with :

df -h |
    perl -anE '
        (my $p = $F[4]) =~ s/%//;
        if ($p >= 80) {
            system("tput setaf 1");
            print;
            system("tput sgr0")
        }
        else {
            print
        }
    '

Or with just :

df -h | 
    while read line; do
        if [[ $line =~ (100|[8-9][0-9])% ]]; then
            tput setaf 1
            echo "$line"
            tput sgr0
        else
            echo "$line"
        fi
    done

Or even with :

df -h |
    awk '
        NR==1{print;next}
        {
            p=$5
            p=gensub(/%/, "", 1, $5)
            if (p>=80) {
                system("tput setaf 1")
                print
                system("tput sgr0")
            }
            else print
        }
    '

其基本思想是使用terminfo数据库不硬编码终端转义序列.

我使用tput,序列名从man terminfo开始,以便在终端中获得正确的代码.

例.

red=$(tput setaf 1); echo "Hello ${red}world!"

更多信息,请访问http://www.gnu.org/software/termutils/

Linux相关问答推荐

Bash脚本用于在远程工作后关闭用户会话

使用 YASM 程序集时如何更改 64 位 Linux 中的终端 colored颜色 ?

如何使 awk 输出更具可读性?

+后移动下一行到当前行

如何使用netcat为DPDK实例提供输入?

如何在 Linux 中向应用程序发出信号而不杀死它?

如何在 linux 'screen' 中搜索任何单词

如何排除 tar 的绝对路径?

打印当前一周的星期一的日期(在 bash 中)

Linux:在目录下的文件列表中搜索特定单词

NGINX:connect() 到 unix:/var/run/php7.0-fpm.sock 失败(2:没有这样的文件或目录)

如何从命令行打开 Ubuntu Linux 上的 AVD 管理器?

命令列出除 . (点)和..(点点)

判断 VT-x 是否已激活而无需在 Linux 中重新启动?

如何获取/使用 LibUUID?

在 Linux 上更新 PyCharm

如何在 sed 中指定非捕获组?

Linux(Ubuntu)终端-如何查看以前的页面不再可见

如何将 ISO8859-15 转换为 UTF8?

Bash:等待超时