Podziel długi wynik na dwie kolumny


20

Czy istnieje proste narzędzie lub skrypt do sortowania wyników jednego z moich skryptów? Mam dane w jakiejś formie:

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

ale jeśli stanie się to dwa długie, zapisz dane w następującej formie (gdzie wciąż są uporządkowane pionowo):

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

Po przeczytaniu strony nie sądzę, że columnbyłoby to właściwe, ale nie jestem pewien. Łatwo jest podzielić na formę:

A B 
C D 
E F

drukując tylko \nco drugą linię (co robi mój obecny skrypt). Jakieś pomysły? Dzięki!

Odpowiedzi:


16

Czy rzeczywiście próbowałeś column ? Wydaje się być dokładnie tym, czego chcesz:

$ 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

Próbowałem. Ale błędnie (z -t)... But for yours to work reliably you probably need --column`.
— Hauke ​​Laging

Próbowałem, ale z jakiegoś powodu nie zdawałem sobie sprawy, że to zależy od szerokości twojego okna terminala (wydaje się teraz oczywiste)!
— Hemmer,

testowałem to również na dwóch maszynach jednocześnie. Podobno stara wersja (około 1993 na Scientific Linux) zachowuje się inaczej do nowszej wersji 2004 ...
— Zwijacz

11

Aby uporządkować dane wyjściowe, prkonwertuje pliki tekstowe do drukowania:

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

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

na przykład

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

nie działa poprawnie dla dużego (długiego) pliku.
— raz

2

Możesz podzielić plik na dwie części (z taką samą liczbą linii lub pierwszy plik ma jedną linię więcej), a następnie wykonaj następujące czynności:

paste file1 file2

Jeśli długość linii jest zbyt różna, może być konieczne użycie printf do dostosowania długości przez wypełnienie spacjami.


Lub ... | paste - - kiedy „dzielenie długiego wyjścia” ...
— don_crissti

1

Możesz użyć zwykłego columns:

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

UWAGA:columns komenda jest częścią autogenpakietu w systemie Fedora 14.

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

Bibliografia


columns: command not found. autogen ?
— Gilles „SO- przestań być zły”

@Gilles - tak, to część autogen. Właśnie sprawdziłem w moim systemie Fedora 14. Wspomnę o tym również w odpowiedzi.
— slm
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.