Linux命令:column

column 命令

基本介绍

column 用于将文本按列格式化输出,使不规则的文本或命令输出更易阅读。它可以根据输入内容自动调整列宽,也可以将分隔符分隔的数据转换为表格。

资料合集:https://pan.quark.cn/s/6fe3007c3e95、https://pan.quark.cn/s/561de99256a5、https://pan.quark.cn/s/985f55b13d94、https://pan.quark.cn/s/d0fb20abd19a

语法

bash 复制代码
column [选项] [文件 ...]
  • 不指定文件时,从标准输入读取。
  • 指定文件时,读取文件内容并格式化输出。

常用选项

  • -t、--table:将输入按表格格式输出,并自动对齐各列。
  • -s 分隔符、--separator 分隔符:指定输入字段分隔符,常与 -t 配合使用。
  • -o 分隔符、--output-separator 分隔符:指定输出列之间的分隔符。
  • -c 宽度、--columns 宽度:指定终端或输出的最大列宽。
  • -x、--fillrows:按行填充,而不是默认的按列填充。
  • -e、--table-empty-lines:在表格模式下保留空行。
  • -N 列名、--table-columns 列名:为表格指定列名。
  • -R 列号、--table-right 列号:将指定列右对齐。
  • -L 列号、--table-left 列号:将指定列左对齐。
  • -T 列号、--table-truncate 列号:允许指定列内容过长时截断。
  • -W 列号、--table-wrap 列号:允许指定列内容换行。
  • --table-hide 列号:隐藏指定列。
  • --table-noextreme:不将极端长度字段用于计算列宽。
  • --table-noheadings:不将首行作为表头处理。
  • --table-right:使指定表格列右对齐。
  • --help:显示帮助信息。
  • --version:显示版本信息。

注意:-t、-s、-o 是最常用且兼容性较好的选项;表格高级选项主要取决于 util-linux 版本。

基本用法

1. 将列表排列成多列

bash 复制代码
printf '%s\n' apple banana cherry date elderberry fig grape | column

column 会根据终端宽度将列表排成多列。

2. 按行填充

bash 复制代码
printf '%s\n' apple banana cherry date elderberry fig | column -x

默认情况下通常按列填充;-x 改为按行填充。

3. 将制表符数据格式化为表格

bash 复制代码
printf 'Name\tAge\nAlice\t20\nBob\t25\n' | column -t

输出示例:

text 复制代码
Name   Age
Alice  20
Bob    25

4. 指定输入分隔符

bash 复制代码
printf 'Alice,20\nBob,25\n' | column -t -s ','

输出示例:

text 复制代码
Alice  20
Bob    25

5. 指定输出分隔符

bash 复制代码
printf 'Alice,20\nBob,25\n' | column -t -s ',' -o ' | '

输出示例:

text 复制代码
Alice | 20
Bob   | 25

6. 格式化命令输出

bash 复制代码
ps -eo pid,comm,%cpu,%mem --no-headers | column -t

适合将空白分隔的多列输出对齐显示。

7. 格式化文件内容

bash 复制代码
column -t -s ':' /etc/passwd

可将冒号分隔的数据对齐为表格。处理敏感文件时,应注意输出中可能包含用户名、路径等信息。

8. 读取文件并限制列宽

bash 复制代码
column -t -c 80 data.tsv

将表格格式化到指定宽度范围内。

表格模式

较新的 util-linux 版本支持更丰富的表格模式选项。

1. 指定列名

bash 复制代码
printf 'alice\t20\n bob\t25\n' | column -t -N Name,Age

2. 指定列对齐方式

bash 复制代码
printf 'alice\t20\nbob\t25\n' | column -t -N Name,Age -R 2

第 2 列按右侧对齐,适合数字数据。

3. 隐藏指定列

bash 复制代码
printf 'alice\tsecret\n bob\tsecret2\n' | column -t -N Name,Token --table-hide 2

4. 截断过长内容

bash 复制代码
printf 'Name\tDescription\nalice\tThis is a very long description\n' | column -t -T 2

不同 util-linux 版本的短选项含义可能存在差异,使用前可运行 column --help 确认。

在脚本中使用

生成简单报告

bash 复制代码
#!/bin/bash
set -euo pipefail

printf 'Service\tStatus\tPort\n'
printf 'nginx\trunning\t80\n'
printf 'ssh\trunning\t22\n'
printf 'mysql\tstopped\t3306\n' | column -t

处理 CSV 数据

bash 复制代码
#!/bin/bash
set -euo pipefail

{
    printf 'User,Department,Status\n'
    printf 'alice,Engineering,Active\n'
    printf 'bob,Sales,Inactive\n'
} | column -t -s ',' -o ' | '

配合管道查看磁盘使用情况

bash 复制代码
df -h | column -t

将表格保存到文件

bash 复制代码
printf 'Name\tScore\nAlice\t95\nBob\t88\n' | column -t > report.txt

与相关命令的对比

命令 主要功能 适用场景
column 对齐多列文本、生成终端表格 快速美化输出
printf 精确控制格式 稳定生成固定格式报告
awk 字段处理和格式化 复杂数据转换
paste 横向合并文件 合并对应行
sort 排序 先排序再格式化
jq 处理 JSON 结构化 JSON 数据
csvlook 查看 CSV 表格 复杂 CSV 展示

column 与 awk 的区别

  • column 重点是对齐和展示,不负责复杂的数据计算。
  • awk 可以按字段过滤、计算、转换,然后将结果交给 column 对齐。
  • 常见组合方式:
bash 复制代码
awk -F: '{print $1 "\t" $3}' /etc/passwd | column -t

column 与 printf 的区别

  • printf 适合列宽和格式完全固定的输出。
  • column 会根据实际内容自动计算列宽,更适合交互式查看。
  • 需要稳定供其他程序解析的输出时,不应依赖自动对齐后的空格。

注意事项

  • column 主要用于人类阅读,不建议将格式化后的空格对齐文本作为机器接口输入。
  • 使用 -t -s 时,输入字段中包含分隔符可能导致列解析结果不符合预期。
  • 不同 Linux 发行版或 util-linux 版本支持的选项可能不同,建议先查看 column --help。
  • 多字节字符、中文和终端宽度可能影响列宽计算;部分版本对宽字符的处理存在差异。
  • CSV 文件可能包含带引号的分隔符、换行和转义内容,复杂 CSV 不应直接用 column -s ',' 解析。
  • 输出敏感数据前,应确认表格中没有密码、令牌或其他机密信息。
  • 可通过 man column 查看当前系统的完整手册。

相关命令

  • awk:按字段处理和格式化文本。
  • printf:生成精确格式的表格输出。
  • paste:按列合并多个文件。
  • sort:排序后交给 column 格式化。
  • jq:格式化和查询 JSON 数据。
  • pr:分页并按列打印文本。
  • expand:将制表符转换为空格。

总结

column 是一个简单实用的文本表格格式化工具,可以自动调整列宽、对齐字段并改善终端输出的可读性。最常用的组合是 column -t -s 分隔符:先指定字段分隔符,再将数据排列为表格。它适合临时查看和生成报告,但不适合替代专业 CSV 解析器,也不应将其对齐后的输出作为稳定的机器接口。

相关推荐
重生之高冷汉堡包5 分钟前
家庭住宅IP是什么?机房住宅与普通住宅有什么区别
运维·服务器·网络·网络协议·tcp/ip·用户运营
Thneonl6 分钟前
git reset --hard 之后先别哭:reflog 里存着你刚弄丢的那个分支
运维·后端
见闻小天地11 分钟前
液冷直流负载:AI 算力中心带载测试的关键设备
运维·业界资讯
迪康软件zz16 分钟前
从 PHP 高危漏洞看纵深防御:资产盘点、补丁管理与端点防护实践
运维·安全·自动化运维
祥Sir的SRE笔记21 分钟前
CPU 100% 不一定是故障:压测打满、业务饱和、突变打满的判断与排查
linux·面试·性能优化·dba·sre·故障定位·性能排查
智能运维指南26 分钟前
2026 年可观测平台选型对比:混合 IT 架构下企业运维监控产品怎么选
运维·可观测·嘉为蓝鲸·运维监控产品对比
Fnetlink129 分钟前
Fnet 云网安 261023
运维·开发语言·网络·人工智能·安全·web安全·php
可爱系程序猿33 分钟前
nvcuvid.dll 加载失败定位:CUDA 视频解码、驱动接口与进程位数逐项核查
运维·服务器·程序人生·电脑·音视频
郝亚军34 分钟前
在win11上用openssl生成私钥、再从私钥导出公钥、...
linux·运维·服务器
智能运维指南40 分钟前
企业 IT 管理软件如何选型?先理清监控、服务管理、配置与自动化能力
运维·自动化·自动化运维·嘉为蓝鲸