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

相关推荐
木卫二号Coding2 小时前
推荐Linux统计文件大小并操作删除工具-ncdu
linux·运维·服务器
志栋智能3 小时前
超自动化运维:实现IT服务消费化的基础
运维·自动化
198******126343 小时前
2026企业AI办公工具选型指南:从评估框架到场景适配
大数据·运维·人工智能
吴声子夜歌3 小时前
Nginx应用与运维——Nginx HTTP模块详解(数据处理功能模块)
运维·nginx·http
zhangrelay3 小时前
机械臂末端规划智能模型的误区演示
linux·笔记·学习·ubuntu·ros2
2601_967212724 小时前
专利型电源轨道系统技术路线对比与选型框架
大数据·运维·网络·经验分享
数字化顾问5 小时前
(138页PPT)流程体系的建设优化与运营(附下载方式)
大数据·运维·人工智能
2601_967287575 小时前
轮胎侧壁上的 91V 是什么意思,负荷指数与速度级别怎么看
运维·服务器·汽车
Ivanqhz5 小时前
正余弦位置编码(Sinusoidal Positional Encoding)
java·linux·数据库
H.莓飛5 小时前
【数据结构】队列
linux·数据结构·centos