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

長い出力を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(現在のスクリプトが何をしているのか)。どんなアイデアがありますか?ありがとうございます!

答え1

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

答え2

出力を列にソートするには、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
...

答え3

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

paste file1 file2

行の長さが多すぎる場合は、printfを使用してスペースを埋めて長さを調整する必要があります。

答え4

以下を簡単に使用できますcolumns

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

メモ:このコマンドは私のFedora 14システムパッケージの一部ですcolumnsautogen

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

引用する

関連情報