web-dev-qa-db-ja.com

長い出力を2つの列に分割する

スクリプトの1つからの出力を列にまとめる単純なユーティリティまたはスクリプトはありますか?私は何らかの形でデータを持っています:

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

しかし、これが2つ長くなる場合は、次の形式でデータを書き込みます(まだ垂直方向に並べられています)。

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

マンページを読んで、これがcolumnが適切であるとは思わないが、よくわからない。次の形式で分割するのは簡単です。

A B 
C D 
E F

印刷のみ\n 2行ごと(現在のスクリプトは何をしているのか)。何か案は?ありがとう!

22
Hemmer

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
17
terdon

出力を列化するために、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
...
11
Digix

ファイルを2つに分割して(同じ行数または最初のファイルに1行以上)、次のように実行できます。

paste file1 file2

行の長さが非常に異なる場合は、printfを使用して、スペースでパディングして長さを調整する必要がある場合があります。

2
Hauke Laging

単純なcolumnsを使用できます:

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

注:columnsコマンドは、私のFedora 14システムのautogenパッケージの一部です。

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

参考文献

1
slm