Định dạng thiết bị xuất chuẩn dưới dạng văn bản nhiều cột


3

Tôi đang cố gắng lấy một số dữ liệu cột đơn và hiển thị nó trong một tty như các cột, giống như lsvậy. Về cơ bản, bạn có thể nghĩ về điều này như cố gắng lấy đầu ra từ đó ls -1và làm cho nó trông giống như đầu ra bình thường ls, trong đó số lượng cột và không gian được cung cấp cho mỗi cột được tối ưu hóa.

Lệnh cột không thể dễ dàng bị ép buộc chiếm một độ rộng nhất định và prtiện ích không tự động thay đổi số lượng cột.

Với tất cả các lệnh phân tích cú pháp văn bản có sẵn, tôi không thể tin rằng không có cách nào để thực hiện điều này.

Đây sẽ là một tập lệnh shell nhỏ khá phức tạp, vì để tính độ rộng cột tối ưu, bạn cần biết có bao nhiêu mục trong cột của bạn (để tính độ dài của mục dài nhất), mà bạn không biết cho đến khi bạn chỉ ra có bao nhiêu cột sẽ phụ thuộc vào chiều rộng của mỗi cột. Bởi vì lý luận tròn, có vẻ như tinh chỉnh lặp đi lặp lại là cách duy nhất để đi. Không khó, nhưng cũng không phải là một lót. Một tích hợp sẽ là một giải pháp tốt hơn nhiều nếu nó tồn tại.


Awk thường được sử dụng cho việc này.
Technosaurus

1
Như bạn đã nói chiều rộng cột không thể được biết trước khi tất cả các dòng cần được kiểm tra. Hầu hết các bộ lọc đơn giản hoạt động như một đường ống (ngoại trừ sắp xếp sử dụng tệp tmp). Điều này làm cho nó không quá tầm thường và tùy trường hợp của bạn, bạn có thể dễ dàng viết kịch bản này dựa trên những gì bạn cần chính xác.
Cougar

Câu trả lời:


1

Bạn sẽ muốn prlệnh:

$ 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

Bạn có thể hài lòng với

My Command | column -t 

Xem Cách dễ dàng để phân loại STDOUT (định dạng văn bản trong các cột)?

Nếu bạn muốn sắp xếp một vài dòng thành một, bạn có thể muốn sử dụng lệnh sed như vậy

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

Trong trường hợp này, bạn đang tạo một dòng từ bốn (ba N;là bốn trừ một) sau đó thay đổi dòng mới \nthành tab ( \t) cho mỗi dòng mới ( \t) trong bộ đệm ( g).

Dòng cuối cùng column -tlàm cho nó thành các cột tối ưu.

Đoạn kết \đơn giản là thoát khỏi các ký tự dòng mới. Bạn có thể muốn gõ

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

thay thế.

Hy vọng bạn đang tận hưởng.


Tôi đang cố gắng xử lý dữ liệu cột đơn mà tôi muốn đưa vào nhiều cột. columnchỉ hữu ích cho việc sắp xếp dữ liệu nhiều cột. tức là: ls -1 | column -tkhông sắp xếp lại mọi thứ để trông giống nhưls
Doug J
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.