Chia đầu ra dài thành hai cột


20

Có một tiện ích hoặc tập lệnh đơn giản để phân loại đầu ra từ một trong các tập lệnh của tôi không? Tôi có dữ liệu ở dạng nào đó:

A aldkhasdfljhaf
B klajsdfhalsdfh
C salkjsdjkladdag
D lseuiorlhisnflkc
E sdjklfhnslkdfhn
F kjhnakjshddnaskjdh

nhưng nếu điều này trở thành hai dài, hãy ghi dữ liệu theo mẫu sau (trong đó vẫn được sắp xếp theo chiều dọc):

A aldkhasdfljhaf    D lseuiorlhisnflkc
B klajsdfhalsdfh    E sdjklfhnslkdfhn
C salkjsdjkladdag   F kjhnakjshddnaskjdh

Từ việc đọc trang này, tôi không nghĩ rằng đây là thứ gì đó columnphù hợp nhưng tôi không chắc. Thật dễ dàng để phân chia theo mẫu:

A B 
C D 
E F

bằng cách chỉ in \nmỗi dòng thứ hai (kịch bản hiện tại của tôi làm gì). Có ý kiến ​​gì không? Cảm ơn!

Câu trả lời:


16

Bạn đã thực sự thử column chưa? Nó dường như là chính xác những gì bạn muốn:

$ cat file
A aldkhasdfljhaf
B klajsdfhalsdfh
C salkjsdjkladdag
D lseuiorlhisnflkc
E sdjklfhnslkdfhn

$ column file
A aldkhasdfljhaf    D lseuiorlhisnflkc
B klajsdfhalsdfh    E sdjklfhnslkdfhn
C salkjsdjkladdag   F kjhnakjshddnaskjdh

Tôi đã thử. Nhưng sai (với -t)... But for yours to work reliably you probably need --columns`.
Hauke ​​Laging

Tôi đã thử nhưng vì một số lý do tôi đã không nhận ra rằng nó phụ thuộc vào chiều rộng của cửa sổ đầu cuối của bạn (có vẻ như bây giờ rõ ràng)!
Hemmer

Ngoài ra tôi đã thử nghiệm điều này trên hai máy cùng một lúc. Rõ ràng phiên bản cũ (khoảng năm 1993 trên Science Linux) hoạt động khác với phiên bản 2004 mới hơn ...
Hemmer

11

Để phân loại đầu ra, prchuyển đổi tệp văn bản để in:

-COLUMN, --columns=COLUMN: output COLUMN columns
      and print columns down, unless -a is used.

-t, --omit-header : omit page headers and trailers

ví dụ

ls /etc | pr -2 -t
abrt                                gtk-2.0
acpi                                hal
adjtime                             hba.conf
agent.properties                    host.conf
aliases                             hosts
aliases.db                          hosts.allow
...

không hoạt động đúng cho tập tin lớn (dài).
một lần vào

2

Bạn có thể chia tệp thành hai (có cùng số dòng hoặc tệp đầu tiên có thêm một dòng) và sau đó thực hiện việc này:

paste file1 file2

Nếu độ dài của các dòng quá khác nhau thì có thể cần phải sử dụng printf để điều chỉnh độ dài bằng cách đệm với khoảng trắng.


Hoặc ... | paste - - khi "tách đầu ra dài" ...
don_crissti

1

Bạn chỉ có thể sử dụng đơn giản columns:

$ cat test.txt | columns
A aldkhasdfljhaf             B klajsdfhalsdfh             C salkjsdjkladdag
D lseuiorlhisnflkc           E sdjklfhnslkdfhn            F kjhnakjshddnaskjdh

LƯU Ý: các columnslệnh là một phần của autogengói trên hệ thống Fedora 14 của tôi.

$ rpm -qf /usr/bin/columns
autogen-5.9.4-7.fc12.x86_64

Tài liệu tham khảo


columns: command not found. tự sinh ?
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles - vâng, đó là một phần của autogen. Chỉ cần kiểm tra trên hệ thống Fedora 14 của tôi. Tôi cũng sẽ đề cập đến nó trong câu trả lời.
slm
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.