将标准输出格式化为多列文本

将标准输出格式化为多列文本

我正在尝试获取一些单列数据并将其作为列显示在 tty 中,就像ls这样做一样。基本上,您可以将其视为尝试获取的输出ls -1并使其看起来像的正常输出ls,其中列数和分配给每列的空间都经过了优化。

列命令不能轻易被强制占用一定的宽度,并且pr实用程序不会动态改变列数。

随着所有文本解析命令可用,我只是不敢相信没有某种方法可以实现这一点。

这将是一个相当复杂的小 shell 脚本,因为为了计算最佳列宽,您需要知道列中将有多少个项目(以计算最长项目的长度),而这只有在您确定将有多少列时才知道,这取决于每列的宽度。由于循环推理,似乎迭代细化是唯一的方法。这并不难,但也不是一行代码。如果存在内置解决方案,那将是一个更好的解决方案。

答案1

你会想要pr命令:

$ seq 25 | pr -t -5
1         6         11        16        21
2         7         12        17        22
3         8         13        18        23
4         9         14        19        24
5         10        15        20        25

答案2

你可能会满意

My Command | column -t 

将 STDOUT 列化的简单方法(在列中格式化文本)?

如果你想将多行合并为一行,你可能需要使用 sed 命令

ls -1 \
| sed -e 'N;N;N;s/\n/\t/g' \
| column -t 

在这种情况下,您将用四行(三N;是四减一)制作一行,然后将新行更改\n为缓冲区()中\t每行( )的制表符( )。\tg

最后一行column -t使其成为最佳列。

结尾\只是转义换行符。您可能需要输入

ls -1 | sed -e 'N;N;N;s/\n/\t/g' | column -t 

反而。

希望您玩得开心。

相关内容