使用column格式化输出
column是一个将输入格式化成多列格式来显示的工具。
举个例子,有一个num.txt的文件包含了从00到24共25个数字,每行一个数字
seq -w 0 24 >/tmp/num.txt
现在我想把它变成5列,每列20行,可以这样做
column -c 40 /tmp/num.txt
结果为:
00 05 10 15 20 01 06 11 16 21 02 07 12 17 22 03 08 13 18 23 04 09 14 19 24
注意这里的 -c 40
表示字符宽度为40,那么40这个数字是怎么算出来的呢?
column使用TAB来作为列与列之间的分割,因此在内容长度小于8的情况下,每一列占用8个字符,5列就是 5*8=40
你会发现,我们产生的顺序是先排第一列(00-04),再排第二列(05-09),再排第三列(10-14)...,依次这么排下去
但若我想要先排第一行,再排第二行...,要怎么办呢?可以使用 -x
选项
column -x -c 40 /tmp/num.txt
结果为:
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
column还有一个广为人知的功能就是通过 -t
选项把一个已经是表格的内容排列整齐,比如网上经常看到的例子
grep -v '#' /etc/fstab |column -t
结果为
UUID=076e5e76-1624-4b38-a80c-7c822f171f56 / ext4 rw,relatime,data=ordered,acl 0 1 UUID=c2cf24f1-0ea3-4fe4-a8d3-5e2629bae9f5 swap swap defaults 0 0 UUID=a31ff6e0-991a-497b-a2d3-4c3dafc62a90 /home ext4 rw,relatime,data=ordered,acl 0 2
-t
选项,还经常与 -s 分隔符
在一起使用,这里 -s
用来指明表格中的分隔符,比如
column -s ",|" -t <<EOF 1,|2,|3 A,|B,|C 你好,|我好,|它好 EOF
结果为
1 2 3 A B C 你好 我好 它好
可以看出,这里的分隔符可以是多个字符组成的序列