如何在列中显示文本文件的内容

如何在列中显示文本文件的内容

我有一个文件如下

Id 123 
Name john
Lastname udosen
Tel 123456
Id 124
Name james
Lastname david
Tel 19865

我如何打印文件如下

Id     Name     Lastname    Tel
123    john     udosen      123456
124    james    david       19865

答案1

假设您想要制表符分隔的输出:

$ { printf '%s\n' Id Name Lastname Tel; sed 's/^[^[:blank:]]*.//' file; } | paste - - - -
Id      Name    Lastname        Tel
123     john    udosen  123456
124     james   david   19865

这用于sed删除每行(标题)上最初的空格或制表符分隔的单词。它将结果提供给paste格式,并将其格式化为四个制表符分隔的列。通过首先使用 输出来添加标头printf

您想要美观(对齐)的输出,然后用于column生成表格。在这里,我告诉在列之间paste插入;,然后使用它们来column对齐字段:

$ { printf '%s\n' Id Name Lastname Tel; sed 's/^[^[:blank:]]*.//' file; } | paste -d ';' - - - - | column -t -s ';'
Id   Name   Lastname  Tel
123  john   udosen    123456
124  james  david     19865

您还可以使用csvlook(部分csvkit) 以类似的方式生成 Markdown 格式的表格:

$ { printf '%s\n' Id Name Lastname Tel; sed 's/^[^[:blank:]]*.//' file; } | paste -d ';' - - - - | csvlook -I -d ';'
| Id  | Name  | Lastname | Tel    |
| --- | ----- | -------- | ------ |
| 123 | john  | udosen   | 123456 |
| 124 | james | david    | 19865  |

相关内容