用awk实现多级排序资产清单需分三步:先用-f指定分隔符提取字段,再用sort按-k优先级链式排序,最后用awk的sprintf控制列宽对齐输出。

用 awk 实现多级排序输出格式整齐的资产清单,关键不是堆砌命令,而是理清三件事:字段分隔与提取、排序优先级设计、列对齐控制。
明确字段结构和分隔符
资产清单通常是 CSV 或空格/制表符分隔的文本,比如:
- 服务器,192.168.1.10,prod,web,2022-03-15,active
- 数据库,10.0.2.5,prod,mysql,2021-11-02,maint
- 中间件,172.16.0.8,dev,kafka,2023-07-20,active
先用 -F ',' 指定逗号分隔,再用 $1,$2,$3... 引用字段。若字段含空格或逗号,建议预处理或改用 -F '\t' 配合制表符分隔更稳妥。
用 sort 做多级排序(awk 本身不排序)
awk 本身不提供稳定多字段排序能力,推荐管道交给 sort 处理——它支持按字段类型(数值/字典)、方向(升/降)、优先级链式指定:
- -k3,3 表示按第3字段(环境)升序
- -k1,1 紧跟其后表示同环境下按第1字段(类型)字典序
- -k5,5r 表示第5字段(日期)逆序(最新在前)
- 完整命令:sort -t',' -k3,3 -k1,1 -k5,5r assets.csv
用 awk 格式化输出对齐列宽
排序后用 awk 控制列宽和对齐,避免字段长度不一导致错位:
- 用 sprintf("%-12s %-15s %-8s %-10s %s", $1,$2,$3,$4,$5) 左对齐各列
- 数字类字段如端口、CPU 数可用 %4d 右对齐并预留宽度
- 标题行可单独用 BEGIN { printf "..." } 输出,加下划线增强可读性
组合成一条清晰流水线
把三步串起来,终端直接跑:
sort -t',' -k3,3 -k1,1 -k5,5r assets.csv | \
awk -F',' 'BEGIN { printf "%-12s %-15s %-8s %-10s %-12s %s\n", "类型","IP","环境","服务","上线日期","状态"; \
printf "%-12s %-15s %-8s %-10s %-12s %s\n", "----","--","----","----","------","----" } \
{ printf "%-12s %-15s %-8s %-10s %-12s %s\n", $1,$2,$3,$4,$5,$6 }'
输出效果整齐、层级清晰,适合人工核查或临时导出。











