1. 命令简介
column 命令是一个用于文本格式化的实用工具,它能将输入文本(无论是来自文件还是标准输入)重新组织成多列格式,从而提升可读性。它主要有两大核心功能:
列式布局:将单列数据(如列表)智能地填充到指定宽度的多列表格中,类似于 ls 命令的输出。 表格对齐:识别并整理具有多列结构但未对齐的文本(如以空格或特定字符分隔的数据),使各列垂直对齐,形成整齐的表格。
2. 语法格式
bash
运行
column [选项] [文件...]参数说明:
文件...:可选,指定要处理的一个或多个文件。如果未指定文件,或者文件名为 -,column 将从标准输入读取数据。这使得它可以轻松地与管道配合使用。
3. 常用选项及说明
表格
| 选项 | 长选项 | 说明 |
|---|---|---|
| -c | --columns <宽度> | 指定输出显示的总宽度(以字符数为单位)。输入的单列数据将在此宽度内被格式化为多列。 |
| -t | --table | 表格模式。自动检测输入行中的列(默认以空格分隔),并创建一个对齐的表格。这是整理多列数据最常用的选项。 |
| -s | --separator <字符串> | 在表格模式 (-t) 下,指定用于识别输入列的分隔符。可以指定多个字符,每个字符都被视为分隔符。 |
| -o | --output-separator <字符串> | 在表格模式 (-t) 下,指定输出时列之间的分隔符。默认为两个空格 (" ")。 |
| -x | --fillrows | 改变列式布局 (-c) 的填充顺序。默认是先填充列(纵向),此选项使其先填充行(横向)。 |
| -N | --table-columns <名称列表> | 为表格的每一列指定一个名称,名称用逗号分隔。通常与 -t 和 -O 选项结合使用,用于重排或选择输出列。 |
| -O | --table-order <列顺序> | 指定输出列的显示顺序。列号从 1 开始,用逗号分隔。需与 -N 或 -t 一起使用。 |
| -h | --help | 显示帮助信息并退出。 |
| -V | --version | 显示版本信息并退出。 |
4. 示例用法
示例 1:基础列式布局(整理列表)
将单列列表转换为适合终端宽度的多列显示。
bash
运行
# 生成一个简单的字母列表 printf "%s\n" {a..z} | column -c 50plaintext
a e i m q u y b f j n r v z c g k o s w d h l p t xbash
运行
# 使用 -x 选项,改为先填充行(横向) printf "%s\n" {1..12} | column -c 30 -xplaintext
1 2 3 4 5 6 7 8 9 10 11 12示例 2:创建对齐的表格(整理多列数据)
整理以空格分隔的、未对齐的文本数据。
bash
运行
# 假设有一个未对齐的文本文件 data.txt cat data.txt Name Age Occupation Alice 30 Engineer Bob 25 Designer Charlie 35 Managerbash
运行
# 使用 -t 选项自动对齐列 column -t data.txtplaintext
Name Age Occupation Alice 30 Engineer Bob 25 Designer Charlie 35 Manager示例 3:自定义输入和输出分隔符
处理使用特定字符(如冒号、逗号)分隔的数据。
bash
运行
# 处理 /etc/passwd 文件(冒号分隔) head -3 /etc/passwd | column -t -s ':'plaintext
root x 0 0 root /root /bin/bash daemon x 1 1 daemon /usr/sbin /usr/sbin/nologin bin x 2 2 bin /bin /usr/sbin/nologinbash
运行
# 指定输出列分隔符为 ‘ | ’ head -3 /etc/passwd | column -t -s ':' -o ' | 'plaintext
root | x | 0 | 0 | root | /root | /bin/bash daemon | x | 1 | 1 | daemon | /usr/sbin | /usr/sbin/nologin bin | x | 2 | 2 | bin | /bin | /usr/sbin/nologin示例 4:组合使用管道
column 常与其他命令通过管道结合,用于格式化输出。
bash
运行
# 格式化 `mount` 命令的输出 mount | column -tbash
运行
# 格式化 `docker ps` 输出 docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | column -t -s $'\t'5. 注意事项
- 默认行为:如果不使用 -t 或 -c 选项,column 会尝试在 80 个字符的宽度内进行列式布局,类似于只使用 -c 80。
- 分隔符处理:在表格模式 (-t) 下,连续的输入分隔符(如多个空格)默认被视为一个分隔符。-s 选项指定的所有字符都具有同等效力。
- 填充顺序:-x(先填充行)和默认的(先填充列)行为差异,在处理非方形数据时结果会不同。根据数据逻辑顺序(如字母、数字序列)选择合适的模式。
- 与 fold 的区别:column 是按 “列” 或 “字段” 来组织内容,保持每个数据单元的独立;而 fold 命令是简单地在指定宽度处对长行进行换行(字符层面)。
Linux 学习资料https://pan.baidu.com/s/1A6qqBk2ViE_Le2cQjSowkQ?pwd=7uz8