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.