chr*_*ise 5 columns text-formatting
我有一些制表符分隔的文件,其中包含的标头由于表条目的长度不同而非常难以读取。本质上,它看起来有点像
c1 c2 c3 c4
A 0 1.0231321321213 92
BBBBB 12321.00002131 19912132. 0
CC 0.0999813221321 0 0
Run Code Online (Sandbox Code Playgroud)
有没有一种方法可以使列间距更宽并且列与可读列很好地对齐,从而使其更具可读性
c1 c2 c3 c4
A 0 1.0231321321213 92
BBBBB 12321.00002131 19912132. 0
CC 0.0999813221321 0 0
Run Code Online (Sandbox Code Playgroud)
如果输入列用简单的空格(ASCII 空格 0x20 和/或制表符 0x09)分隔并且没有空白列,则简单如下:
\n\n<infile column -t\nc1 c2 c3 c4\nABC 0 1.0231321321213 92\nBBBBB 12321.00002131 19912132. 0\nCC 0.0999813221321 0 0\n
Run Code Online (Sandbox Code Playgroud)\n\n但是,column
不会将回车符(ASCII 0x0d 或\\r
)、换页符(ASCII 0x0c 或\\f
)或垂直制表符(ASCII 0x0b 或\\v
)处理为分隔符。
\n如果列可能用一些“空格”分隔([[:space:]]
类似于[ \\t\\r\\f\\v]
:空格、水平制表符、回车符、提要或垂直制表符(不是换行符)),则需要将所有空格折叠(并转换)为仅一个分隔符(默认为空格)。不能同时使用换行符作为行分隔符和列分隔符。
除了换行符之外,这项工作:
\n\n<infile sed \'s/[[:space:]]\\+/ /g\' | column -t\n
Run Code Online (Sandbox Code Playgroud)\n\n可以减少[\xe2\x80\xa6]
范围内的空白分隔符。
如果源文件中的列用单个字符(如制表符)分隔,则可以使用 shell ANSI C 扩展 ( $\'\xe2\x80\xa6\'
)(如果正在运行的 shell 具有此类功能)来声明用作分隔符的字符。
\n然后,使用column
:
<infile column -s $\'\\t\' -t\n
Run Code Online (Sandbox Code Playgroud)\n\n列的输出分隔符始终是空格。
\n\n如果需要接受多个连续的分隔符(当存在空白列时有用),可以使用 (GNU) 选项-n
禁用将多个输入相邻分隔符合并为单个分隔符。
<infile column -s $\'\\t\' -tn\n
Run Code Online (Sandbox Code Playgroud)\n\n如果源文件不是用单个字符而是用多个字符分隔的,您仍然可以在其中定义这些字符,$\'...\'
而无需额外使用sed
将它们转换为单个字符;例如空格或制表符:
<infile column -s $\'\\t \' -tn\n
Run Code Online (Sandbox Code Playgroud)\n