Format stdout sebagai teks multi-kolom


3

Saya mencoba untuk mengambil beberapa data kolom tunggal dan menampilkannya dalam tty sebagai kolom, seperti lshalnya. Pada dasarnya, Anda dapat menganggap ini sebagai mencoba untuk mengambil output dari ls -1dan membuatnya terlihat seperti output normal ls, di mana jumlah kolom dan ruang yang diberikan untuk setiap kolom dioptimalkan.

Perintah kolom tidak dapat dengan mudah dipaksa untuk mengambil lebar tertentu, dan prutilitas tidak secara dinamis mengubah jumlah kolom.

Dengan semua perintah penguraian teks yang tersedia, saya tidak percaya tidak ada cara untuk mewujudkannya.

Ini akan menjadi skrip shell kecil yang cukup rumit, karena untuk menghitung lebar kolom optimal Anda perlu tahu berapa banyak item dalam kolom Anda (untuk menghitung panjang item terpanjang), yang Anda tidak tahu sampai Anda mencari tahu berapa banyak kolom akan ada, yang tergantung pada lebar setiap kolom. Karena alasan yang melingkar, sepertinya perbaikan berulang adalah satu-satunya cara untuk pergi. Tidak sulit, tetapi juga tidak satu-liner. Built-in akan menjadi solusi yang jauh lebih baik jika ada.


Awk biasanya digunakan untuk ini.
technosaurus

1
Seperti yang Anda katakan, lebar kolom tidak bisa diketahui sebelum semua garis perlu diperiksa. Kebanyakan filter sederhana berfungsi sebagai pipa (kecuali sortir yang menggunakan file tmp). Ini membuatnya tidak terlalu sepele dan tergantung pada kasus Anda, mungkin lebih mudah bagi Anda untuk hanya menulis skrip ini berdasarkan apa yang sebenarnya Anda butuhkan.
Cougar

Jawaban:


1

Anda akan menginginkan prperintah:

$ seq 25 | pr -t -5
1         6         11        16        21
2         7         12        17        22
3         8         13        18        23
4         9         14        19        24
5         10        15        20        25

0

Anda mungkin senang

My Command | column -t 

Lihat Cara mudah untuk membuat kolom STDOUT (memformat teks dalam kolom)?

Jika Anda ingin mengatur beberapa baris menjadi satu, Anda mungkin ingin menggunakan perintah sed seperti itu

ls -1 \
| sed -e 'N;N;N;s/\n/\t/g' \
| column -t 

Dalam hal ini, Anda membuat satu baris dari empat (tiga N;adalah empat minus satu) kemudian mengubah baris baru \nmenjadi tab ( \t) untuk setiap baris baru ( \t) di buffer ( g).

Baris terakhir column -tmenjadikannya kolom yang optimal.

Akhiran \hanya lolos dari karakter baris baru. Anda mungkin ingin mengetik

ls -1 | sed -e 'N;N;N;s/\n/\t/g' | column -t 

sebagai gantinya.

Semoga Anda menikmati.


Saya mencoba menangani data kolom tunggal yang ingin saya masukkan ke dalam beberapa kolom. columnhanya berguna untuk mengatur data multi-kolom. yaitu: ls -1 | column -ttidak mengatur ulang hal-hal yang terlihat sepertils
Doug J
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.