如何对宽度最小的项目列表进行分栏?


7

我该如何将未分类的输入分成列ls

ls 正在创建每行最小宽度的优化表,例如:

ls

2  dsao  file with space  with
5  e     g                wsdl-rubo-6cb0f1a9086e80c
d  file   leading space

但是,如果我将输出输入column(例如,一行中的每个文件),它会将每一行填充相同的宽度,因此适合屏幕宽度:

for i in *; do echo "$i"; done | column

2                               file with space                          
5                               g                                        
d                                leading space                           
dsao                            with                                     
e                               wsdl-rubo-6cb0f1a9086e80c                
file

(我在这里仅使用文件列表来生成与示例相同的输出,我正在寻找这样一种解决方案来最终对其他内容进行列化。)

如何对col-width可变的任何输出进行整理?


好的,如果我正确理解了您的评论,那么对您的请求的另一种解读将是“像column -c_ n-x`那样合并输入,但将输出尽可能地容纳在尽可能少的屏幕列中,而不是填写指定的宽度”。它是否正确?
jthill

几乎可以:另外,应产生尽可能多的适合屏幕的列。(例如ls管理)。如果我们查看coreutils ls命令
rubo77

Answers:


5

感谢@ rubo77提出这个问题,这是一个很棒的练习。对我而言,要解决的错误是英语,而Tough Stuff就是糟糕的节奏:它变得有趣,快速,尽管这里的算法本身非常简单。

[最终编辑:移至https://github.com/jthill/columnate/blob/master/columnate,已修复错误,已实现行主要功能。]


你也应该把它放在github上。如果它比ls-algorythm更快,也许您可​​以创建一个更快的ls-util?
rubo77

@ rubo77您需要向其提供COLUMNS变量。请参阅代码中的“测试方式”注释。和10X-20X是周围的其他方式,它的速度较慢,主要是因为它的AWK VS C.
jthill

time ls | sort | columnate COLUMNS=$COLUMNS
jthill

你是个天才。必须为每个Linux发行版发布此文件
rubo77

嗯,谢谢,真的,但这太强大了。阅读代码,几乎是蛮力的
jthill 2013年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.