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 |
やはり高機能なコマンドになるほど性能は悪くなるのかなぁ