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

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

如何像这样对任何未分栏的输入进行分栏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

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

如何使用可变的列宽度对任何输出进行列列?

答案1

感谢@rubo77 提出这个问题,这是一个很好的练习。对我来说,这对于差一点的错误就像英语是艰难的东西对于糟糕的节奏一样:它变得有趣、快速,尽管这里的算法本身非常简单。

[最终编辑:移至https://github.com/jthill/columnate/blob/master/columnate,修复了错误,实现了行优先。 ]

答案2

接近输出的东西ls

for i in *; do echo -en "${i}\t"; done; echo

答案3

这不使用每行的最小宽度,就像@jthill上面的解决方案一样,但还需要注意的是:

我安装了autogen包含完全解决此问题的homebrew命令:columns

  1. 安装自制程序:https://brew.sh/
  2. brew install autogen

测试用

spit() { for i ; do echo "$i"; done; }
spit 1 2222222222222222 3 4 5 6 7777777777777777 8 $(seq 10 30) | columns

输出:

1                   2222222222222222    3                   4
5                   6                   7777777777777777    8
10                  11                  12                  13
14                  15                  16                  17
18                  19                  20                  21
22                  23                  24                  25
26                  27                  28                  29

注意:也许 apt 包也足够了:

apt install autogen

答案4

您可以创建临时文件夹并为未分栏输入的每个字符串项创建空文件,然后用于ls分栏输出。

例子:

mkdir -p /tmp/col
IFS=''
echo "something_very_long-something_very_long-something_very_long
output with space
 space-at-beginning
3
4
5
6
7
8
9"|while read; do 
  touch /tmp/col/"$REPLY"
  done
cd /tmp/col/
ls
rm /tmp/col/*

输出:

 3   7                    something_very_long-something_very_long-something_very_long
 4   8                   ' space-at-beginning'
 5   9
 6  'output with space'

相关内容