我有一个C程序输出两列,完全未对齐.不对齐的原因是第一列中的单词长度非常不同.
我在vi中打开了一个输出文件.如何快速对齐这两列?我使用awk,perl,sed,而不仅仅是vi(7.2)工具集.另外,我们可以为具有两列以上的文件提供通用解决方案吗?
这是示例文件
column1 column2
------- -------
sdfsdfsddfsdfsdfsdfsd 343r5
dfgdfgdf 234
gdfgdfgdfgdfgf 645
Run Code Online (Sandbox Code Playgroud)
小智 36
对于快速和脏的修复,将其通过列管道:
your_program | column -t
Run Code Online (Sandbox Code Playgroud)
如果需要在列数据中包含空格,则使用某些字符(例如"|")分隔字段 和:
your_program | column -t -s "|"
Run Code Online (Sandbox Code Playgroud)
您可以将任何字符用于分隔符,并使用-s开关指定它.控制字符是可能的,但使用起来有点棘手.
但正如杰伊所说,你最好修复程序以正确格式化输出.
Jay*_*rod 31
据推测,您首先要使用printf输出列.您可以在格式字符串中使用额外的修饰符,以确保对齐.
为了给出一个更深入的例子:
printf("%-30s %8s %8s\n", "Name", "Address", "Size");
for (i = 0; i < length; ++i) {
printf("%-30s %08x %8d\n", names[i], addresses[i], sizes[i]);
Run Code Online (Sandbox Code Playgroud)
这将打印三列,如下所示:
Name Address Size
foo 01234567 346
bar 9abcdef0 1024
something-with-a-longer-name 0000abcd 2048
Run Code Online (Sandbox Code Playgroud)