侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux tbl命令教程:如何创建和格式化表格(附实例详解和注意事项)

Linux tbl命令介绍

tbl命令是table的缩写,它的全称是table formatter,它的作用是将troff输入文件中嵌入的表格描述转换成troff能理解的命令。它可以让你在文档中插入各种样式的表格,如有边框、无边框、双重边框、居中、对齐等。它还可以与eqn预处理器配合,让你在表格中使用数学公式。

Linux tbl命令适用的Linux版本

tbl命令是GNU项目的一部分,它是groff文档格式化系统的组成部分。它可以在任何安装了groff的Linux系统上运行,如Ubuntu, Debian, Fedora, CentOS等。如果你的系统没有安装groff,你可以使用以下命令来安装:

  • 对于基于Debian的系统,如Ubuntu,你可以使用apt命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt update
[linux@bashcommandnotfound.cn ~]$ sudo apt install groff
  • 对于基于Red Hat的系统,如Fedora,你可以使用dnf命令:
[linux@bashcommandnotfound.cn ~]$ sudo dnf update
[linux@bashcommandnotfound.cn ~]$ sudo dnf install groff
  • 对于基于Red Hat的系统,如CentOS 7,你可以使用yum命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum update
[linux@bashcommandnotfound.cn ~]$ sudo yum install groff
  • 对于基于Red Hat的系统,如CentOS 8,你可以使用dnf命令:
[linux@bashcommandnotfound.cn ~]$ sudo dnf update
[linux@bashcommandnotfound.cn ~]$ sudo dnf install groff

Linux tbl命令的基本语法

tbl命令的基本语法如下:

tbl [options] [files...]

其中,options是一些可选的参数,用来控制tbl的行为,files是要处理的输入文件,如果没有指定文件,或者文件名为"-",则从标准输入读取。

tbl命令的常用选项有:

  • -C:启用兼容模式,即使.TS和.TE后面跟着的不是空格或换行符,也能识别它们为表格开始和结束的标志。
  • -v:打印版本号,然后退出。

tbl命令的输入文件中,需要用.TS和.TE两个宏来标记表格的开始和结束,表格的描述可以有多个部分,每个部分之间用.T&来分隔。表格的描述包括以下几个部分:

  • 表格的全局选项,用来设置表格的样式,如边框、居中、行高等。
  • 表格的格式说明,用来指定表格的列数、列宽、列对齐、列类型等。
  • 表格的数据,用来填充表格的内容,每行一个数据项,数据项之间用制表符或指定的分隔符分隔。
  • 表格的文本块,用来在表格中插入段落或其他格式的文本。

Linux tbl命令的常用选项或参数说明

tbl命令的全局选项有以下几种,它们可以用逗号、空格或制表符分隔,必须以分号结束:

选项参数说明
allbox给表格的每个单元格加上边框
box给表格加上边框
center将表格居中显示,如果不指定,则默认左对齐
decimalpoint(c)设置数值列中的小数点为字符c,而不是默认的点号
delim(xy)设置eqn的开始和结束分隔符为x和y,而不是默认的$
doublebox给表格加上双重边框
expand使表格的宽度与当前行宽相同,如果有x类型的列,则忽略此选项
frame同box
linesize(n)设置边框的线条大小为n点,而不是默认的0.4点
nokeep不使用分散来防止表格被分页
nospaces忽略数据项中的前导和后置空格
nowarn关闭表格超出行宽的警告
tab(x)设置数据项的分隔符为字符x,而不是默认的制表符

tbl命令的格式说明有以下几种,它们可以用逗号、空格或制表符分隔,必须以点号结束:

格式说明
n数值列,右对齐,小数点对齐
a字母列,左对齐
c居中列
l左对齐列
r右对齐列
s跨列
^跨行
b底部对齐
i中间对齐
t顶部对齐
d下降
f字体
eeqn
m数学
p段落
v垂直
w宽度
x扩展
z零宽度

Linux tbl命令的实例

实例1:创建一个简单的无边框表格

如果你只想创建一个简单的无边框表格,你可以使用以下的输入文件:

.TS
tab(@);
l l l
Name@Age@Gender
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE

其中,tab(@)表示使用@作为数据项的分隔符,l l l表示三列都是左对齐的字母列,Name@Age@Gender是表格的第一行,也就是表头,后面的三行是表格的数据。注意,每一行的数据项的个数必须和列的个数相同,否则会出错。

你可以使用以下的命令来处理这个输入文件,并输出到标准输出:

[linux@bashcommandnotfound.cn ~]$ tbl simple.txt | nroff -Tascii

你会得到以下的输出:

Name    Age     Gender
Alice   20      Female
Bob     22      Male
Charlie 21      Male

你可以看到,这是一个简单的无边框表格,每一列都是左对齐的,数据项之间用空格分隔。

实例2:创建一个有边框的表格

如果你想给表格加上边框,你可以在全局选项中使用box或frame选项,例如:

.TS
box;
tab(@);
l l l
Name@Age@Gender
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE

你可以使用同样的命令来处理这个输入文件,并输出到标准输出:

[linux@bashcommandnotfound.cn ~]$ tbl box.txt | nroff -Tascii

你会得到以下的输出:

+--------+-----+--------+
|Name    |Age  |Gender  |
+--------+-----+--------+
|Alice   |20   |Female  |
+--------+-----+--------+
|Bob     |22   |Male    |
+--------+-----+--------+
|Charlie |21   |Male    |
+--------+-----+--------+

你可以看到,这是一个有边框的表格,每个单元格都被一个+号和一条横线或竖线分隔。

实例3:创建一个有双重边框的表格

如果你想给表格加上双重边框,你可以在全局选项中使用doublebox或doubleframe选项,例如:

.TS
doublebox;
tab(@);
l l l
Name@Age@Gender
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE

你可以使用同样的命令来处理这个输入文件,并输出到标准输出:

[linux@bashcommandnotfound.cn ~]$ tbl doublebox.txt | nroff -Tascii

你会得到以下的输出:

##+--------+-----+--------+##
||Name    |Age  |Gender  ||
##+--------+-----+--------+##
||Alice   |20   |Female  ||
##+--------+-----+--------+##
||Bob     |22   |Male    ||
##+--------+-----+--------+##
||Charlie |21   |Male    ||
##+--------+-----+--------+##

你可以看到,这是一个有双重边框的表格,每个单元格都被两个#号和两条横线或竖线分隔。

实例4:创建一个有标题的表格

如果你想给表格加上一个标题,你可以在表格的数据部分的第一行使用.TC宏,例如:

.TS
box;
tab(@);
l l l
Name@Age@Gender
.TC
Student Information
_
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE

其中,.TC表示表格的标题,后面跟着标题的内容,这里是Student Information,下划线表示标题和表格之间的分隔线,你可以省略它,或者用其他字符代替。

你可以使用同样的命令来处理这个输入文件,并输出到标准输出:

[linux@bashcommandnotfound.cn ~]$ tbl title.txt | nroff -Tascii

你会得到以下的输出:

+----------------------+
|Student Information   |
+--------+-----+--------+
|Name    |Age  |Gender  |
+--------+-----+--------+
|Alice   |20   |Female  |
+--------+-----+--------+
|Bob     |22   |Male    |
+--------+-----+--------+
|Charlie |21   |Male    |
+--------+-----+--------+

你可以看到,这是一个有标题的表格,标题居中显示,标题和表格之间有一条分隔线。

实例5:创建一个有数学公式的表格

如果你想在表格中使用数学公式,你可以在格式说明中使用e或m选项,表示该列是eqn或math类型的列,然后在数据部分使用eqn的语法来写数学公式,例如:

.TS
box;
tab(@);
l e l
Name@Score@Grade
Alice@\( \sqrt{90} \)@A
Bob@\( \frac{80}{2} \)@B
Charlie@\( \int_0^1 x^2 dx \)@C
.TE

其中,e表示eqn类型的列,(和)表示eqn的开始和结束分隔符,你也可以在全局选项中用delim选项来改变它们,eqn的语法可以参考eqn手册。

你可以使用以下的命令来处理这个输入文件,并输出到标准输出:

[linux@bashcommandnotfound.cn ~]$ tbl math.txt | eqn | nroff -Tascii

注意,你需要在tbl和nroff之间加上eqn命令,来处理数学公式。

你会得到以下的输出:

+--------+-------+-------+
|Name    |Score  |Grade  |
+--------+-------+-------+
|Alice   | 9.49  |A      |
+--------+-------+-------+
|Bob     | 40.00 |B      |
+--------+-------+-------+
|Charlie | 0.33  |C      |
+--------+-------+-------+

你可以看到,这是一个有数学公式的表格,数学公式被计算出来,并显示在表格中。

实例6:创建一个有不同对齐方式的表格

如果你想在表格中使用不同的对齐方式,你可以在格式说明中使用r, c, l, b, i, t等选项,表示右对齐、居中、左对齐、底部对齐、中间对齐、顶部对齐等,例如:

.TS
box;
tab(@);
r c l b i t
Name@Age@Gender@Height@Weight@Hobby
Alice@20@Female@165@50@Reading
Bob@22@Male@180@70@Swimming
Charlie@21@Male@175@60@Joking
.TE

其中,r c l b i t表示六列分别是右对齐、居中、左对齐、底部对齐、中间对齐、顶部对齐的列,Name@Age@Gender@Height@Weight@Hobby是表格的第一行,也就是表头,后面的三行是表格的数据。

你可以使用以下的命令来处理这个输入文件,并输出到标准输出:

[linux@bashcommandnotfound.cn ~]$ tbl align.txt | nroff -Tascii

你会得到以下的输出:

+--------+-----+--------+--------+--------+---------+
|   Name | Age |Gender  |Height  | Weight |Hobby    |
+--------+-----+--------+--------+--------+---------+
|  Alice |  20 |Female  |    165 |     50 |Reading  |
+--------+-----+--------+--------+--------+---------+
|    Bob |  22 |  Male  |    180 |     70 |Swimming |
+--------+-----+--------+--------+--------+---------+
|Charlie |  21 |Male    |    175 |     60 |Joking   |
+--------+-----+--------+--------+--------+---------+

你可以看到,这是一个有不同对齐方式的表格,每一列都按照指定的方式对齐,表头和数据之间有一条分隔线。

实例7:创建一个有跨列和跨行的表格

如果你想在表格中使用跨列和跨行的单元格,你可以在格式说明中使用s和^选项,表示跨列和跨行,然后在数据部分使用^和_来表示跨列和跨行的数据项,例如:

.TS
box;
tab(@);
l s s
l ^ l
Name@Score@Grade
Alice@\( \sqrt{90} \)@A
Bob@\( \frac{80}{2} \)@B
Charlie@\( \int_0^1 x^2 dx \)@C
.TC
Average@.TB
\( \frac{\sqrt{90}+\frac{80}{2}+\int_0^1 x^2 dx}{3} \)
.TE@_
.TE

其中,l s s表示第一行有三列,分别是左对齐、跨列、跨列的列,l ^ l表示第二行有三列,分别是左对齐、跨行、左对齐的列,Name@Score@Grade是表格的第一行,也就是表头,后面的三行是表格的数据,其中^表示跨行的数据项,_表示跨列的数据项,.TC表示表格的标题,后面跟着标题的内容,这里是Average,.TB和.TE表示文本块的开始和结束,文本块中使用eqn的语法来写数学公式,表示平均分。

你可以使用以下的命令来处理这个输入文件,并输出到标准输出:

[linux@bashcommandnotfound.cn ~]$ tbl span.txt | eqn | nroff -Tascii

注意,你需要在tbl和nroff之间加上eqn命令,来处理数学公式。

你会得到以下的输出:

+--------+-----------------+
|Average | 30.16           |
+--------+-----------------+
|Name    |Score      |Grade|
+--------+-----------+-----+
|Alice   | 9.49      |A    |
+--------+-----------+-----+
|Bob     | 40.00     |B    |
+--------+-----------+-----+
|Charlie | 0.33      |C    |
+--------+-----------+-----+

你可以看到,这是一个有跨列和跨行的表格,Average是一个跨列的标题,( \frac{\sqrt{90}+\frac{80}{2}+\int_0^1 x^2 dx}{3} )是一个跨行的数据项,它们都被计算出来,并显示在表格中。

实例8:创建一个有不同宽度的表格

如果你想在表格中使用不同的宽度,你可以在格式说明中使用w选项,表示指定的宽度,然后在括号中给出宽度的值,例如:

.TS
box;
tab(@);
l w(5n) l
Name@Age@Gender
Alice@20@Female
Bob@22@Male
Charlie@21@Male
.TE

其中,w(5n)表示第二列的宽度是5个数字的宽度,n表示数字的宽度,你也可以用其他的单位,如i表示英寸,c表示厘米,p表示点等,Name@Age@Gender是表格的第一行,也就是表头,后面的三行是表格的数据。

你可以使用以下的命令来处理这个输入文件,并输出到标准输出:

[linux@bashcommandnotfound.cn ~]$ tbl width.txt | nroff -Tascii

你会得到以下的输出:

+--------+-----+--------+
|Name    |Age  |Gender  |
+--------+-----+--------+
|Alice   |  20 |Female  |
+--------+-----+--------+
|Bob     |  22 |Male    |
+--------+-----+--------+
|Charlie |  21 |Male    |
+--------+-----+--------+

你可以看到,这是一个有不同宽度的表格,第二列的宽度是固定的,而第一列和第三列的宽度是自适应的。

Linux tbl命令的文本块

如果你想在表格中插入一段段落或其他格式的文本,你可以在格式说明中使用p选项,表示该列是段落类型的列,然后在数据部分使用.TB和.TE宏来标记文本块的开始和结束,例如:

.TS
box;
tab(@);
l p l
Name@Description@Gender
Alice@.TB
Alice is a smart and kind girl.
She likes to read books and play chess.
.TE@Female
Bob@.TB
Bob is a brave and strong boy.
He likes to climb mountains and swim in the sea.
.TE@Male
Charlie@.TB
Charlie is a funny and friendly boy.
He likes to tell jokes and make friends.
.TE@Male
.TE

其中,p表示段落类型的列,.TB和.TE表示文本块的开始和结束,文本块中可以使用troff的命令来控制文本的格式,如换行、字体、缩进等。

你可以使用以下的命令来处理这个输入文件,并输出到标准输出:

[linux@bashcommandnotfound.cn ~]$ tbl text.txt | nroff -Tascii

你会得到以下的输出:

+--------+---------------------------------+--------+
|Name    |Description                      |Gender  |
+--------+---------------------------------+--------+
|Alice   |Alice is a smart and kind girl.  |Female  |
|        |She likes to read books and play |        |
|        |chess.                           |        |
+--------+---------------------------------+--------+
|Bob     |Bob is a brave and strong boy.   |Male    |
|        |He likes to climb mountains and  |        |
|        |swim in the sea.                 |        |
+--------+---------------------------------+--------+
|Charlie |Charlie is a funny and friendly  |Male    |
|        |boy.                             |        |
|        |He likes to tell jokes and make  |        |
|        |friends.                         |        |
+--------+---------------------------------+--------+

你可以看到,这是一个有文本块的表格,文本块中的文本会自动换行和对齐,你也可以用troff的命令来调整它们的格式。

Linux tbl命令的注意事项

在使用tbl命令时,你需要注意以下几点:

  • tbl命令只是一个预处理器,它不会直接输出表格,而是生成troff能理解的命令,你需要用troff或nroff或groff来处理它们,如果你要使用数学公式,你还需要用eqn来处理它们。
  • tbl命令的输入文件中,必须用.TS和.TE来标记表格的开始和结束,否则tbl命令会忽略它们,如果你在.TS和.TE之间有其他的troff命令,它们会被当作表格的一部分,可能会导致错误。
  • tbl命令的输入文件中,每一行的数据项的个数必须和列的个数相同,否则会出错,如果你的数据项中有制表符或指定的分隔符,你需要用引号或反斜杠来转义它们。
  • tbl命令的输入文件中,如果你要使用eqn或math类型的列,你需要用eqn的语法来写数学公式,你也需要在tbl和troff之间加上eqn命令来处理它们,如果你的数学公式中有分隔符,你需要用引号或反斜杠来转义它们。
  • 如果你的系统没有安装groff,会出现bash: tbl: command not found。

Linux tbl命令的相关命令

除了tbl命令,还有一些与表格相关的命令,它们是:

troff命令

troff命令是一个文本格式化程序,它可以处理tbl生成的命令,以及其他的宏和命令,来生成格式化的文档。它可以输出到不同的设备,如PostScript, PDF, HTML等。你可以使用以下的语法来调用troff:

troff [options] [files...]

其中,options是一些可选的参数,用来控制troff的行为,files是要处理的输入文件,如果没有指定文件,或者文件名为"-",则从标准输入读取。

troff的常用选项有:

  • -t:表示输入文件中包含tbl命令,需要用tbl来预处理。
  • -e:表示输入文件中包含eqn命令,需要用eqn来预处理。
  • -T:表示输出的目标设备,如ascii, ps, pdf, html等。
  • -m:表示使用指定的宏包,如man, ms, mm等。

nroff命令

nroff命令是一个文本格式化程序,它与troff类似,但是它只能输出到ASCII设备,如终端或打印机。它可以处理tbl生成的命令,以及其他的宏和命令,来生成格式化的文档。你可以使用以下的语法来调用nroff:

nroff [options] [files...]

其中,options是一些可选的参数,用来控制nroff的行为,files是要处理的输入文件,如果没有指定文件,或者文件名为"-",则从标准输入读取。

nroff的常用选项有:

  • -t:表示输入文件中包含tbl命令,需要用tbl来预处理。
  • -e:表示输入文件中包含eqn命令,需要用eqn来预处理。
  • -T:表示输出的目标设备,如ascii, latin1, utf8等。
  • -m:表示使用指定的宏包,如man, ms, mm等。

groff命令

groff命令是一个文本格式化程序,它是GNU项目的一部分,它是troff和nroff的兼容和增强版本。它可以处理tbl生成的命令,以及其他的宏和命令,来生成格式化的文档。它可以输出到不同的设备,如PostScript, PDF, HTML, ASCII等。你可以使用以下的语法来调用groff:

groff [options] [files...]

其中,options是一些可选的参数,用来控制groff的行为,files是要处理的输入文件,如果没有指定文件,或者文件名为"-",则从标准输入读取。

groff的常用选项有:

  • -t:表示输入文件中包含tbl命令,需要用tbl来预处理。
  • -e:表示输入文件中包含eqn命令,需要用eqn来预处理。
  • -T:表示输出的目标设备,如ascii, ps, pdf, html等。
  • -m:表示使用指定的宏包,如man, ms, mm等。
0

评论区