我正在try 从一个换行符分隔的数据文件生成一个N列表,该文件包含不带任何空格的任意文本.

例如,我有一个文件:

One
Two
Three
Four
Five
Six

我想在终端中显示这些数据,如下所示:

One        Two
Three      Four
Five       Six

除非我误解了列的工作原理,否则它似乎不允许指定输出表 struct .

没有任何参数,cat file | column简单地将它们全部显示在各自的行上,就像CAT一样.

使用-t--table选项,它在同一行cat file | column -t上显示它们

我try 了各种参数组合以及-t-C Left-C Right,以try 将输出格式化为2列.

我用pr工具也非常接近我想要的:cat file | pr -t --columns 2

然而,格式并不是很正确,因为一些单元格有空格来改变对齐方式,而pr实际上并没有提供任何其他的调整.

有没有人能提供一个原生的Shell/Linux解决方案来获取文本序列列表并以N列组成的表格格式显示它们?

推荐答案

已给予:

$ cat file
One
Two
Three
Four
Five
Six

您可以执行以下操作:

$ paste -sd '\t\n' file | column -t
One    Two
Three  Four
Five   Six

(或者,paste -sd '\t\n' - <file | column -t)

关键是paste-d 'xy'字符串中的两个字符之间交替:

$ seq 10 | paste -sd '!|' -
1!2|3!4|5!6|7!8|9!10

因此,要使用粘贴获得两列,请交替使用列分隔符和行分隔符:

$ paste -sd '\t\n' file
One Two
Three   Four
Five    Six

如果您想要三列,您可以这样做:

$ paste -sd '\t\t\n' file
One Two Three
Four    Five    Six

paste之外的另一种 Select 是awk:

$ awk '{ getline line; printf "%s\t%s\n", $0, line }' file
# same output

awk的优点是列和行尾之间的格式可以是多个字符.

然后,要填充这两列以使它们笔直,请在awk或粘贴后的管道中使用column -t.

Linux相关问答推荐

如何确定Linux上的最大静态TLS(线程本地存储)块大小?

C++17:G++8.5版似乎无法正确生成无符号64位伪随机整数

如何在带模式的文件频繁更改的管道中使用grep-f带模式的文件?

如何告诉链接器不要在链接的共享库中查找某些符号?

输出特定字符的所有列号

为什么我的 Docker 进程不断在我的 Raspberry Pi 上重新启动?

最小的 x86_64 Hello World ELF 二进制文件是什么?

你如何在 CentOS9 上使用 C++ fmt?

Linux time 命令输出中 real、user 和 sys 的含义

如何在 Linux 命令行上解析 CSV 文件?

你如何在 C 中的 Linux 上进行非阻塞控制台 I/O?

带有 curl 的 Linux 脚本来判断 Web 服务是否已启动

如何在没有 IDE 的情况下构建和部署三星 SmartTV 应用程序(例如:在 Linux 上)

docker images显示图像,docker rmi表示没有这样的图像或参考不存在

Linux 中的直接内存访问

如何在没有空格的情况下打印 awk?

在 Emacs 中匹配括号的命令是什么?

从线程内Forking 是否安全?

如何从 Linux 终端找到特定文件?

学习内核编程