แยกเอาท์พุทยาวเป็นสองคอลัมน์


20

มียูทิลิตี้หรือสคริปต์ง่าย ๆ ที่จะจัดเรียงผลลัพธ์จากหนึ่งในสคริปต์ของฉันหรือไม่ ฉันมีข้อมูลในบางรูปแบบ:

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

แต่ถ้าสิ่งนี้กลายเป็นสองความยาวให้เขียนข้อมูลในรูปแบบต่อไปนี้ (ซึ่งยังคงเรียงตามแนวตั้ง):

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

จากการอ่าน manpage ฉันไม่คิดว่านี่จะเป็นสิ่งcolumnที่เหมาะสม แต่ฉันไม่แน่ใจ มันง่ายที่จะแยกในรูปแบบ:

A B 
C D 
E F

โดยพิมพ์เฉพาะ\nทุกบรรทัดที่สอง (สิ่งที่สคริปต์ปัจจุบันของฉันทำ) ความคิดใด ๆ ขอบคุณ!

คำตอบ:


16

คุณลอง จริงcolumnหรือ ดูเหมือนจะเป็นสิ่งที่คุณต้องการ:

$ 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)... But for yours to work reliably you probably need --columns`.
Hauke ​​Laging

ฉันลอง แต่ด้วยเหตุผลบางอย่างฉันไม่ได้ตระหนักว่ามันขึ้นอยู่กับความกว้างของหน้าต่างเทอร์มินัลของคุณ (ตอนนี้ดูเหมือนชัดเจน)!
Hemmer

ฉันกำลังทดสอบสิ่งนี้กับสองเครื่องในคราวเดียว เห็นได้ชัดว่ารุ่นเก่า (ประมาณ 1993 ในทางวิทยาศาสตร์ Linux) ทำงานแตกต่างกันไปใหม่รุ่น 2004 ...
Hemmer

11

ในการเรียงคอลัมน์ผลลัพธ์ให้prแปลงไฟล์ข้อความสำหรับการพิมพ์:

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

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

เช่น

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

ทำงานไม่ถูกต้องสำหรับไฟล์ขนาดใหญ่ (ยาว)
ครั้งเดียว

2

คุณสามารถแบ่งไฟล์เป็นสองไฟล์ (ด้วยจำนวนบรรทัดเท่ากันหรือไฟล์แรกที่มีหนึ่งบรรทัดขึ้นไป) จากนั้นทำสิ่งนี้:

paste file1 file2

หากความยาวของเส้นนั้นแตกต่างกันมากเกินไปคุณอาจจำเป็นต้องใช้ printf เพื่อปรับความยาวโดยการเติมช่องว่าง


หรือ... | paste - - เมื่อ "แยกเอาท์พุทที่ยาว" ...
don_crissti

1

คุณสามารถใช้ธรรมดาcolumns:

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

หมายเหตุ:columnsคำสั่งเป็นส่วนหนึ่งของautogenแพคเกจในระบบ Fedora 14 ของฉัน

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

อ้างอิง



@Gilles - autogenใช่มันเป็นส่วนหนึ่งของ เพิ่งตรวจสอบในระบบ Fedora 14 ของฉัน ฉันจะพูดถึงมันในคำตอบเช่นกัน
slm
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.