Bagaimana cara membuat kolom daftar item dengan lebar minimal?

7

Bagaimana cara membuat kolom input yang lstidak dikolomasikan seperti halnya?

ls membuat tabel yang dioptimalkan dengan lebar minimum untuk setiap baris, misalnya:

ls

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

tetapi jika saya memasukkan output ke column(mis. setiap file pada satu baris), itu mengisi setiap baris dengan lebar yang sama, sehingga sesuai dengan lebar layar:

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

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

(Saya hanya menggunakan daftar file di sini untuk menghasilkan output yang sama seperti contoh, saya mencari solusi seperti itu untuk membuat kolom hal-hal lain pada akhirnya.)

Bagaimana saya bisa mengkolumisasi keluaran apa pun dengan lebar col variabel?

rubo77
sumber
Oke, pembacaan alternatif dari permintaan Anda, jika saya memahami komentar Anda dengan benar, akan menjadi " mem-kolomkan input seperti yang dilakukan column -c_ n-x`, tetapi paskan output menjadi kolom layar sesedikit mungkin daripada mengisi lebar yang ditentukan". Apakah ini benar?
jthill
ya hampir: Selain itu harus ada sebanyak mungkin kolom yang sesuai dengan layar. (seperti lsmengelola itu). Mungkin kita menemukan solusinya, jika kita melihat kode sumber kode sumber lsdi
coreutils

Jawaban:

5

Terima kasih @ rubo77 untuk menanyakan ini, ini latihan yang bagus. Bagi saya itu adalah kesalahan satu-per-satu apa itu Bahasa Inggris Tough Stuff adalah untuk merusak ritme: itu menyenangkan, cepat, meskipun algoritma itu sendiri di sini cukup sederhana.

[edit terakhir: pindah ke https://github.com/jthill/columnate/blob/master/columnate , bug diperbaiki, baris-mayor diimplementasikan. ]

jthill
sumber
Anda juga harus meletakkan ini di github. Jika lebih cepat dari alsory ls, mungkin Anda dapat membuat utilitas ls lebih cepat?
rubo77
@ rubo77 Anda harus memberinya variabel COLUMNS. lihat komentar 'test with' dalam kode. Dan 10x-20x sebaliknya, lebih lambat, kebanyakan karena awk vs C.
jthill
time ls | sort | columnate COLUMNS=$COLUMNS
jthill
Anda jenius. Ini harus dipublikasikan untuk setiap distribusi linux
rubo77
eh, terima kasih, sungguh, tapi itu terlalu kuat. baca kodenya, hampir brute force
jthill
3

Sesuatu yang dekat dengan output dari ls:

for i in *; do echo -en "${i}\t"; done; echo
Radu Rădeanu
sumber
bagus, itu hanya melompat berturut-turut, jika garis input bervariasi lebih dari satu lebar tab. Apakah ada cara untuk mencegah terputusnya output di sisi kanan jendela?
rubo77