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