Diary

Diary

日々学んだことをアウトプットする場として初めてみました

ターミナルで複数行で表示させる

N行横に並べて表示させたい

  • ターミナル上で、以下の方法を用いて横並びを実施
    • xargs
    • paste
    • awk
  • それぞれのパフォーマンスを調査

xargs,

  • -n オプションでいけそう
man xargs
> -n number
> ...
> Set the maximum number of arguments taken from standard input for
> each invocation of utility.

実際に10までの数を5個ずつ横に並べてみる

seq 10 | xargs -n 5
>  1 2 3 4 5
> 6 7 8 9 10

10万までの数を5個ずつ横に並べてみて、その時間を測定する

seq 100000 | xargs -n 5
> seq 100000  0.02s user 0.00s system 0% cpu 23.087 total
> xargs -n 5  7.37s user 17.16s system 87% cpu 28.080 total

paste,

  • 100万までの数を5個ずつ横に並べてみて、その時間を測定する
seq 1000000 | paste - - - - -
> seq 1000000  0.29s user 0.01s system 16% cpu 1.815 total
> paste - - - - -  0.71s user 0.17s system 48% cpu 1.829 total

awk,

  • 100万までの数を5個ずつ横に並べてみて、その時間を測定する
time seq 1000000 | awk '{if(NR%5==0){print $1}else{printf $1" "}}'
> seq 1000000  0.25s user 0.01s system 20% cpu 1.250 total
> awk '{if(NR%5==0){print $1}else{printf $1" "}}'  1.01s user 0.15s system 90% cpu 1.270 total

結果

paste > awk >> xargs

xargs paste awk
10万 100万 100万
time 7.4s 0.7s 1.0s

やはり高機能なコマンドになるほど性能は悪くなるのかなぁ