最小幅でアイテムのリストを劣化させるには?

最小幅でアイテムのリストを劣化させるには?

このような非列入力をどのように開くことができますかls

ls最適化されたテーブルは、行ごとに最小幅で作成されます。例:

ls

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

ただし、出力を(たとえば、1行の各ファイル)入力すると、各行は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問題を完全に解決するコマンドをインストールしましたhomebrewcolumns

  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'

関連情報