Linux中Column命令是一个非常实用的工具支持格式化输出,让列式数据更易读。可以把输入流中的连续文本行分割成多列输出,类似于制表符或空格分隔的值。
Column命令的基本用法:
column < inputfile
该命令将输入文件的内容格式化成多列输出。
自动制表符:
column -t < inputfile
Column-t可以实现自动检测输入中的制表符,并按制表符分隔的列进行格式化。
-s选项允许指定一个自定义的分隔符号,以冒号为例指定分隔符:
column -s ':' < inputfile
指定列宽可以用-c,允许指定列的最大宽度,如设置为10个字符:
column -l < inputfile
左对齐,-1选项使输出的列左对齐,而不是默认的右对齐:
column -l < inputfile
使用Column-N可以输出不使用填充字符:
column -N < inputfile
可以使用seq命令来生成1到20的数字,再通过管道传递给Column命令,-t使输出制表符分隔,-c 4指定为四列为一组。
以下命令可以列出当前目录下的全部文件,并用制表符分隔的列格式输出,-t让输出表格化:
ls -l | column -t
使用逗号作为自定义分隔符,以表格形式输出:
column -s ',' -t < inputfile
可以合并多个表格,将多个文件的内容合并后,使用column命令以制表符分隔的列格式输出:
cat file1 file2 | column -t
可以配合其他命令来显示当前运行的全部进程,并以制表符分隔列的格式输出:
ps aux | column -t
Column命令可以处理包含多个分隔符的文件。Column只能识别一个分隔符,所需处理多个分隔符文件需要先用awk或sed等工具预处理文件,再把所有分隔符统一为一个,再用哪个Column命令。先用awk命令:
awk '{gsub(/[,;:|]/, FS); print}' inputfile | column -t -s,,
这里gsub函数用于将所有出现的分隔符(在这个例子中是逗号,、分号;、冒号:和竖线|)替换为字段分隔符FS(默认为空格),然后column命令使用-t选项以表格形式输出,并使用-s,,指定逗号为分隔符。
再使用sed:
sed 's/[,;:|]/ /g' inputfile | column -t
这里sed命令将所有分隔符替换为空格,然后column命令以默认的空格分隔符进行格式化。
使用tr替换分隔符,tr可以用来删除或者替换字符,把所有的分隔符都替换成统一的字符:
tr -s '[:punct:]' ' ' < inputfile | column -t
以上命令可以把全部标点符号替换成空格,再使用Column命令以空格分隔符进行格式化。
如果文件中的不同列使用不同的分隔符,可以使用paste和awk来处理:
paste -d, - - - < inputfile | awk -F, '{print $1, $2, $3}' | column -t
其中paste作为分隔符把文件列合并,再用awk处理合并后的行,最后用column命令格式化输出。
处理多分隔符文件时,要确定哪种分隔符是最常见的或者哪种分隔符是最适合作为统一分隔符。预处理步骤可能会根据文件具体内容和格式有所不同,所以要根据实际情况来 调整awk、sed、tr等命令的正则表达式。预处理可能会增加处理时间,特别是大文件需要进一步权衡处理效率和结果准确性。