我有一些制表符分隔的文件,这些文件由一个非常不可读的标题组成,因为表条目的长度不同。本质上,它看起来有点像
c1 c2 c3 c4
A 0 1.0231321321213 92
BBBBB 12321.00002131 19912132. 0
CC 0.0999813221321 0 0
有没有一种方法可以使列间距更宽,并且列与可读列很好地对齐,例如
c1 c2 c3 c4
A 0 1.0231321321213 92
BBBBB 12321.00002131 19912132. 0
CC 0.0999813221321 0 0
如果输入列用简单的空格(ASCII 空格 0x20 和/或制表符 0x09)分隔并且没有空白列,则简单如下:
但是
column
,不会将回车(ASCII 0x0d 或\r
)、换页(ASCII 0x0c 或\f
)或垂直制表符(ASCII 0x0b 或\v
)作为分隔符处理。如果列可能用一些“空格”分隔(
[[:space:]]
类似于[ \t\r\f\v]
:空格、水平制表符、回车、来自提要或垂直制表符(不是换行符)),您需要将所有空格折叠(并转换)为一个分隔符(默认为空格)。不能同时使用换行符作为行分隔符和列分隔符。除了换行符,这项工作:
可以减少
[…]
范围内的空白分隔符。如果源文件中的列用单个字符(如制表符)分隔,则可以使用 shell ANSI C 扩展 (
$'…'
)(如果正在运行的 shell 具有这种能力)来声明用作分隔符的字符。然后,使用
column
:列的输出分隔符始终是空格。
如果需要接受几个连续的定界符(当有空白列时很有用),有一个(GNU)选项
-n
可以禁止将多个输入相邻定界符合并到一个定界符中。如果源文件不是用单个字符而是用多个字符分隔的,您仍然可以在其中定义它们,
$'...'
而无需额外使用sed
将它们转换为单个字符;像 Space 或 Tabs 一样: