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

相关推荐
Csxyzj1 小时前
kubernetes集群部署方法
java·linux·kubernetes
深念Y1 小时前
OnlyOffice 打开来自 Windows/WPS 的 Office 文档时,出现排版错乱、文字空白、字体显示异常。
linux·windows·debian·onlyoffice·字体·wps·office
ShineWinsu1 小时前
对于 C++:C++20中Concept(概念) 与 Coroutine(协程)的解析
linux·开发语言·网络·c++·c++20·epoll
日常筹谋记2 小时前
ATS选不对运维两行泪:数据中心市电与柴发切换场景的双电源自动转换开关选型笔记
运维·数据库·笔记
绿蚁新亭2 小时前
Markdown Wiki 网页代码块复制至欧拉 Linux Shell 脚本隐形字符故障完整复盘
linux·运维·服务器
Loongproxy2 小时前
2026年动态IP代理真实可用率怎么横评?爬虫选代理的关键是什么
服务器·网络·网络协议·tcp/ip
mengge.cloud2 小时前
LVS 小白完整教程(Linux虚拟服务器负载均衡)
linux·运维·服务器·负载均衡·lvs
秦渝兴2 小时前
LVS-DR 高可用集群实战:NFS + Web + DNS + Keepalived 全套架构
linux·服务器·网络·lvs
江湖有缘2 小时前
跨平台AI终端Wave:智能SSH与文件管理
运维·人工智能·ssh