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?


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. ]


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

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.