返回

如何有条件地突出显示 Linux 中的 `df` 输出?

Linux

在 Linux 中有条件地突出显示 df 输出并显示完整结果

问题

你想在 Linux 中突出显示 df 命令输出中满足特定条件(例如达到一定百分比)的特定列,同时保留完整输出。

解决方法

使用 awk 命令,可以根据特定模式对文本文件进行处理。以下是如何使用 awk 突出显示 df 输出中的高使用率百分比:

df -h | awk '{ if ($5 >= "80%") { print $0 "\033[0;31m" $5 "\033[0m" } else { print $0 } }'

剖析命令

  • df -h: 列出文件系统并显示人类可读的输出。
  • awk: 文本处理工具。
  • '{ if ($5 >= "80%") { print $0 "\033[0;31m" $5 "\033[0m" } else { print $0 } }':
    • $5 >= "80%": 检查第五列(使用率百分比)是否大于或等于 80%。
    • print $0 "\033[0;31m" $5 "\033[0m": 如果条件为真,则打印整行,并将第五列用红色突出显示。
    • else { print $0 }: 如果条件为假,则打印整行。

示例输出

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

替代方案

如果不需要完整的输出,可以使用 grep 快速过滤满足条件的行:

df -h | grep "80%"

结论

使用 awk 和转义序列,可以轻松地根据条件突出显示 df 输出中的特定列并保留完整输出,这有助于快速识别高使用率文件系统,从而优化系统性能和存储空间。

常见问题解答

  1. 如何更改突出显示的颜色?

    • 更改转义序列,例如 \033[0;31m 用于红色,\033[0;32m 用于绿色,\033[0;33m 用于黄色。
  2. 我可以过滤其他列吗?

    • 是的,只需更改条件表达式中的列号,例如 $4 表示已用空间大小。
  3. 突出显示的列与其他列重叠怎么办?

    • 使用 printfpaste 等命令调整列对齐方式。
  4. 如何使突出显示适用于所有行?

    • 删除条件语句,即 ifelse 语句。
  5. 我可以根据多个条件突出显示吗?

    • 是的,使用逻辑运算符(例如 &&||)组合多个条件。