找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1378

积分

0

好友

186

主题
发表于 3 天前 | 查看: 9| 回复: 0

在Linux命令行环境下处理系统信息或日志文本时,原始输出往往排列杂乱,可读性不佳。此时,对输出结果进行格式化就显得尤为重要。

以查看磁盘使用情况的 df -h 命令为例,其原始输出与使用awk简单提取字段后的对比如下:

图片

可以看到,未经格式化的awk输出虽然提取了关键数据,但列与列之间紧密相连,视觉上非常混乱。通过printf函数进行格式化后,可读性将大幅提升:

df -h|awk '{printf "%-40s%-8s%-8s%-5s%-20s\n",$1,$2,$4,$5,$6}'
df -h|awk '{printf "%-40s|%-8s|%-8s|%-5s|%-20s\n",$1,$2,$4,$5,$6}'

图片

然而,当输出的表头包含中文时,直接使用上述方法会出现列无法对齐的问题,这是因为中文字符的显示宽度通常为英文字符的两倍。

图片

解决方案是将标题行与数据行分开处理,并为它们指定不同的字段宽度,这在编写复杂的Shell脚本时是一个实用技巧:

df -h|head -1|awk '{printf "%-19s|%-6s|%-6s|%-3s|%-17s\n",$1,$2,$4,$5,$6}';df -h|tail -n +2|awk '{printf "%-23s|%-8s|%-8s|%-5s|%-20s\n",$1,$2,$4,$5,$6}'
# 或微调参数以更好适配
df -h|head -1|awk '{printf "%-19s|%-6s|%-6s|%-4s|%-17s\n",$1,$2,$4,$5,$6}';df -h|tail -n +2|awk '{printf "%-23s|%-8s|%-8s|%-6s|%-20s\n",$1,$2,$4,$5,$6}'

图片

实际应用中,你需要根据具体字段的长度来调整宽度参数,还可以结合grep命令过滤,只输出关键的文件系统信息。

对于CPU使用率的监控,格式化输出相对简单:

图片

而内存使用情况的展示则稍复杂一些,如果不仅要显示使用率,还要包含总大小、已用容量等信息,就需要更精细的awk命令来处理。

图片

核心格式化工具详解

在Shell中,主要借助echoprintf来实现丰富的格式化输出。

1. echo命令:颜色与特效

echo命令配合-e参数可以输出带颜色、闪烁等特效的文本,常用于脚本中的高亮提示。

基本格式为:

echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"

例如,输出红底黄字:

echo -e "\033[41;33m 警告信息 \033[0m"

颜色代码参考:

  • 字颜色(30-37)30黑,31红,32绿,33黄,34蓝,35紫,36青,37白。
  • 背景色(40-47)40黑,41红,42绿,43黄,44蓝,45紫,46青,47白。

控制选项:

  • \033[0m:关闭所有属性
  • \033[1m:设置高亮度
  • \033[4m:下划线
  • \033[5m:闪烁
  • \033[7m:反显(前景背景色互换)

应用实例,输出一个闪烁的红色停止提示:

echo -e "\033[37;31;5mMySQL Server Stop...\033[39;49;0m"

图片

2. printf函数:精准格式控制

printf函数可以精确控制输出的格式,既能独立使用,也是awk命令进行格式化输出的黄金搭档。与默认换行的print不同,printf需要明确指定格式(format)并且不会自动添加换行符。

基本格式指示符:

  • %s:字符串
  • %d, %i:十进制整数
  • %f:浮点数
  • %c:单个字符
  • %%:输出%自身

常用修饰符:

  • -:左对齐(默认右对齐)
  • +:显示数值的正负号
  • 数字:指定最小字段宽度(如%10s
  • .数字:指定精度(对于浮点数%.2f,或字符串最大长度%.5s

在awk中的使用:

# 基本用法
awk -F ':' '{ printf("用户名:%-10s UID:%d\n", $1, $3) }' /etc/passwd

# 格式化浮点数,例如显示内存使用率
free | awk '/Mem:/ {printf("内存使用率:%.1f%%\n", $3/$2*100)}'

在纯Shell脚本中的使用:

# 格式化输出多个变量,保持表格对齐
printf "%-10s%-15s%-15s%-15s%-15s%-15s\n" ${date} ${line} ${file_num} ${datafile_num} ${totalcount} ${filespace}

掌握echo的颜色控制和printf的精准格式化,能让你在Linux运维和脚本编写中,轻松生成清晰、美观且信息突出的终端输出,极大提升工作效率和脚本的可读性。




上一篇:Nano Banana Pro低层次视觉能力评测:40个数据集覆盖14个任务的零样本极限测试
下一篇:工学视角解构社会:从计算机科学到软件工程的系统性构建
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 18:57 , Processed in 0.186480 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表