Linux/Macのコンソール上で出力を複数列に分割する
Pocket

ふと、LinuxやMacのコンソール上で出力内容を複数列に分割する場合、どうすればいいかなと思ったので少し調べた。
複数列といっても、分割する方向が縦か横かで違って来ると思うので、ここではそこも踏まえて調べることとする。
Linuxの場合だとpasteコマンドやprコマンドをうまく使う必要があるが、Mac OS Xの場合BSDベースのためrsコマンドやlamコマンドといったコマンドを使うことでより簡単に処理が行える。

今回は、2列に分割しての例で進めていく。

1.Linuxの場合

横方向

方向が横方向の場合、普通にpasteコマンドを使用すればよい。
もしくは、prコマンドで「-a」オプションを付与する。

コマンド | paste - -
コマンド | pr -2 -t -a
blacknon@BS-PUB-UBUNTU-01:/tmp$ printf "%d\n" {1..20} | paste - -
1       2
3       4
5       6
7       8
9       10
11      12
13      14
15      16
17      18
19      20
blacknon@BS-PUB-UBUNTU-01:/tmp$ printf "%d\n" {1..20} | pr -2 -t -a
1                                   2
3                                   4
5                                   6
7                                   8
9                                   10
11                                  12
13                                  14
15                                  16
17                                  18
19                                  20

 

縦方向

方向が縦方向の場合、Linuxではprコマンドを用いる。
それ以外の方法となると、一度pasteで列を分割した後にdatamashなどを使って表の縦横の入れ替えをするなどがあるが、この場合だと行数を制限する必要があるのであまりお勧めしない。

Ubuntuの場合であれば、後述するBSD系のコマンドであるrsコマンドがインストールできるのでそれを用いる方法もある。

コマンド | pr -2 -t
コマンド | rs -t 0 2
blacknon@BS-PUB-UBUNTU-01:/tmp$ printf "%d\n" {1..20} | pr -2 -t
1                                   11
2                                   12
3                                   13
4                                   14
5                                   15
6                                   16
7                                   17
8                                   18
9                                   19
10                                  20
blacknon@BS-PUB-UBUNTU-01:/tmp$ printf "%d\n" {1..20} | rs -t 0 2
1   11
2   12
3   13
4   14
5   15
6   16
7   17
8   18
9   19
10  20
Sponsored Links

2.Mac OS Xの場合

横方向

横方向の場合は、Mac OS XでもLinuxと変わらずpasteコマンドを使えばよい。
rsコマンドで「-t」オプションを付与しなくても同様の処理ができる。

コマンド | paste - -
コマンド | rs 0 2
BS-VPN-MAC-01:~ user$ printf "%d\n" {1..20} | paste - -
1       2
3       4
5       6
7       8
9       10
11      12
13      14
15      16
17      18
19      20
BS-VPN-MAC-01:~ user$ printf "%d\n" {1..20} | rs 0 2
1   2
3   4
5   6
7   8
9   10
11  12
13  14
15  16
17  18
19  20

 

縦方向

Mac OS Xの場合、標準でrsコマンドが使えるので、それを使用すればよい。

コマンド | rs -t 0 2
BS-VPN-MAC-01:~ user$ printf "%d\n" {1..20} | rs -t 0 2
1   11
2   12
3   13
4   14
5   15
6   16
7   17
8   18
9   19
10  20
BS-VPN-MAC-01:~ user$ printf "%d\n" {1..20} | rs -t 0 3
1   8   15
2   9   16
3   10  17
4   11  18
5   12  19
6   13  20
7   14

 

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。