名称
column —— 将输入文本以列状格式美观输出
概述
column
[选项]... [文件]...
描述
column
命令用于将标准输入或指定文件内容,按照分隔符分隔成多列,并以对齐美观的表格形式输出。常用于处理文本数据、命令输出、日志等,使其在终端显示更清晰易读。column
在数据处理、脚本编写、系统管理、日志分析等场景中非常常用。
该命令通常作为 Linux 系统自带工具,位于 util-linux
软件包中,几乎所有主流发行版均有内置。
本手册详细介绍 column
的主要用法、常见参数、输入输出格式、管道联用、脚本嵌套等,配合实例和必要的术语解释,帮助初学者和进阶用户高效掌握该工具。
选项
通用选项
-c
,--columns <宽度>
指定输出的最大列宽(以字符为单位)。超过此宽度后自动换行。
示例:column -c 80 file.txt
-t
,--table
根据输入内容自动进行表格化输出(表格模式),以空白字符为分隔。
示例:cat /etc/passwd | column -t -s ':'
-s <分隔符>
,--separator <分隔符>
指定分隔符字符,用于分割输入内容为各列。默认为空白字符。
示例:column -s, -t data.csv
-o <字符串>
,--output-separator <字符串>
指定输出时各列之间的分隔符字符串。默认为两个空格。-x
,--fillrows
按行优先(横向填充)而非列优先(纵向填充)排版。
示例:seq 1 10 | column -x
(seq(命令)生成一系列数字的工具)-R <列号列表>
,--table-right <列号列表>
指定表格中的某些列采用右对齐。列号从1开始,多个列用逗号分隔。
示例:column -t -s, -R 2,4 data.csv
-T <列号列表>
,--table-noautowrap <列号列表>
指定不自动换行的列。-N <列名列表>
,--table-columns <列名列表>
指定列名(用于表头),以逗号分隔。
示例:column -t -s, -N 姓名,年龄,成绩 学生信息.csv
-e
,--table-empty-lines
保留空行(默认会去除空行)。-h
,--table-columns
自动根据输入的首行作为表头。-V
,--version
显示版本号并退出。-H <行号列表>
,--table-header <行号列表>
指定哪些行为表头(行号从1开始),表头下方自动添加分隔线。--help
显示帮助信息并退出。
用法详解
1. 基本用法
将标准输入内容以列状输出:
$ echo -e "apple\nbanana\ncherry\ndate" | column
apple banana cherry date
如上,将单列内容横向填充为多列(默认按终端宽度自动排布)。
2. 指定输入文件
$ column fruits.txt
其中 fruits.txt
内容:
apple
banana
cherry
date
输出:
apple banana cherry date
3. 表格模式(-t)
对多字段文本以表格对齐输出:
假设 data.txt
内容如下:
张三 18 85
李四 19 90
王五 17 78
执行:
$ column -t data.txt
输出:
张三 18 85
李四 19 90
王五 17 78
各字段根据最大宽度对齐,便于阅读。
4. 指定分隔符(-s)
如 CSV 文件内容:
姓名,年龄,成绩
张三,18,85
李四,19,90
王五,17,78
可执行:
$ column -s, -t data.csv
输出:
姓名 年龄 成绩
张三 18 85
李四 19 90
王五 17 78
说明:
-s,
指以逗号为分隔符-t
启用表格对齐
5. 指定输出分隔符(-o)
$ column -s, -t -o ' | ' data.csv
输出:
姓名 | 年龄 | 成绩
张三 | 18 | 85
李四 | 19 | 90
王五 | 17 | 78
6. 横向填充模式(-x)
$ seq 1 10 | column -x
输出:
1 2 3 4 5
6 7 8 9 10
与默认纵向填充(逐列填充)效果不同。
7. 右对齐/不自动换行
假设 sales.csv
内容如下:
商品,数量,单价,总价
苹果,10,2.5,25
香蕉,8,3,24
右对齐第2/4列:
$ column -s, -t -R 2,4 sales.csv
输出:
商品 数量 单价 总价
苹果 10 2.5 25
香蕉 8 3 24
8. 指定表头/列名 (-N, -h, -H)
如果数据文件无表头,可用 -N
指定:
$ column -s, -t -N Name,Age,Score data.csv
若需将首行作为表头,并加分隔线:
$ column -s, -t -h data.csv
或指定表头行为第1行和第3行(适用于多表头数据):
$ column -s, -t -H 1,3 data.txt
9. 保留空行(-e)
默认下空行将被忽略。若需保留输入中的空行:
$ column -t -e data.txt
进阶用法
1. 管道联合
column 最强大的地方是可与其它命令联合。例如:
联合 cut 命令
cut
(提取文本中的指定列)与 column 联用:
$ cut -d: -f1,3 /etc/passwd | column -t -s:
输出系统用户及其 UID:
root 0
daemon 1
bin 2
...
联合 grep/awk/sed
筛选并格式化日志:
$ grep "ERROR" app.log | awk '{print $1, $2, $5}' | column -t
显示含关键字 "ERROR" 的行的时间、日期、错误码三列。
2. 输出重定向与文件保存
将格式化结果保存到文件:
$ column -s, -t data.csv > formatted.txt
3. 结合 sort 排序
对表格内容按某列排序:
$ sort -t, -k2 -n data.csv | column -s, -t
按第二列(年龄)数字升序排序后,再表格化输出。
4. 结合 uniq 去重
对内容去重并格式化:
$ sort data.txt | uniq | column
典型应用场景
1. 格式化命令输出
如 ls -l
输出较乱,可格式化:
$ ls -l | column -t
更适用于自定义输出格式:
$ ls | column
2. 日志及数据文件的快速浏览
快速理清各字段的含义:
$ tail -n 20 /var/log/syslog | column -t
3. 交互式脚本输出美化
在 shell 脚本中,输出多字段信息时用 column 格式化,提升可读性。
#!/bin/bash
echo "用户 UID Shell"
getent passwd | awk -F: '{print $1, $3, $7}' | column -t
4. 多表头数据的处理
如多级表头数据的对齐,借助 -H
参数。
常见问题与注意事项
1. 输入分隔符与输出分隔符混淆
输入分隔符用 -s
,输出分隔符用 -o
,二者不可混用。
2. 终端宽度影响
如果列数太多,超出终端宽度则会自动换行。可用 -c <宽度>
指定最大宽度。
3. 中文字符对齐问题
部分终端或字体,中文字符宽度可能导致列对齐异常。建议使用等宽字体或预处理数据。
4. 多空格分隔文本
默认 -t
会将多个空格视为一个分隔符。如需严格分列,建议统一分隔符(如制表符、逗号)。
5. 不支持嵌套表格
column 仅适用于扁平表格。不支持多层嵌套或合并单元格。
概念解释
- 分隔符(delimiter)
用于分割字符串的字符或字符串。例如,逗号,
、制表符\t
、空格等。
例:a,b,c
以逗号为分隔符分为三列。 - 表头(header)
表格首行,通常描述各列的含义。
例:姓名,年龄,成绩
是数据表的表头。 - 管道(pipe)
Linux shell 中,用|
将前一个命令的输出作为下一个命令的输入。
例:cat file.txt | column
。 - 终端宽度(terminal width)
当前终端窗口的字符宽度,影响 column 输出的自动换行。 - 等宽字体(monospace font)
每个字符宽度相等的字体,如 DejaVu Sans Mono,更适合表格显示。
相关工具
cut
—— 按列提取文本awk
—— 文本处理与格式化sed
—— 流编辑器,用于文本替换与处理sort
—— 排序工具uniq
—— 去重工具printf
—— 格式化输出
常用实例大全
实例1:格式化显示 /etc/passwd 的用户与 Shell
cat /etc/passwd | cut -d: -f1,7 | column -t -s:
实例2:格式化 CSV 文件,并右对齐第3列
column -s, -t -R 3 data.csv
实例3:终端宽度100字符内输出
column -c 100 -t data.txt
实例4:带表头的日志数据格式化
cat log.txt | column -t -h
性能与局限
column
适合于中小体量文本数据的快速格式化。对于超大文件(如百万行以上),推荐结合 head
、tail
预览部分数据,避免全文件加载导致性能下降。
脚本化与自动化建议
在自动化脚本中,column
可提升输出的友好度,但如需进一步处理数据,建议用 awk
、sed
等生成标准 CSV,再用 column
美化最终输出。
参考文献
- man 1 column
- util-linux column 源码与官方文档
- GNU coreutils
- Linux Shell 编程实践
总结
column
命令是 Linux 系统中极其实用的数据格式化工具。通过灵活配置分隔符、列宽、对齐方式等,可在终端中轻松实现文本数据的美观对齐与快速浏览。熟练掌握其用法有助于提升日常运维、开发、数据处理等多方面的效率。