Linux命令:column

column 命令

基本介绍

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

资料合集:https://pan.quark.cn/s/6fe3007c3e95https://pan.quark.cn/s/561de99256a5https://pan.quark.cn/s/985f55b13d94https://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 展示

columnawk 的区别

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

columnprintf 的区别

  • 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 解析器,也不应将其对齐后的输出作为稳定的机器接口。

相关推荐
宽海智能仓储物流12 小时前
航发自动化立体库异构系统改造:宽海智能30天联调技术全解析
运维·数据仓库·自动化
鹤落晴春13 小时前
【K8s】从 ConfigMap 到 Argo CD:Kubernetes 配置管理链路
运维·云原生·容器·kubernetes
2601_9494999413 小时前
DT‑1414PTZ如何百分百兼容(安华高)HFBR‑1414PTZ
运维·网络·人工智能·科技·光模块
fengyehongWorld13 小时前
Linux 安装frp实现内网穿透
linux·运维·服务器
一_个前端13 小时前
[TailScale]-打通你的局域网服务器到公网电脑
linux
DO_Community13 小时前
Omarchy 将研发基础设施迁移至 DigitalOcean 云平台
linux·人工智能·llm·agent·omarchy
米糕闯编程14 小时前
鱼香ros2(三)Linux操作总结
linux·机器人·ros2
一技安身14 小时前
【信创】银河麒麟V10服务器使用安装光盘Packages自建本地yum源
linux·运维·服务器
码农客栈15 小时前
Linux I2C驱动实验
linux·运维·驱动开发
爱喝水的鱼丶15 小时前
SAP-ABAP:隐式/显式增强开发规范与避坑指南:10 类典型错误与运维方案
运维·性能优化·sap·abap·增强·经验交流