@nullpopopoさんの記事を受けて、自分もやってみました。
シェル芸空行を出力する(別解) | (っ´∀`)っ ゃー | nullpopopo
さて、FreeBSDには rs(1) という、配列を変換するコマンドがあります。例えば、
1
2
3
|
% jot 10 | rs 2 3
1 2 3
4 5 6
|
とすれば、上記のように1~10の列を縦2行×横3列にした行列を得ることが出来ます。
また、引数を1つにすると
1
2
3
|
% jot 10 | rs 2
1 2 3 4 5
6 7 8 9 10
|
このように、縦2行の行列をいい感じに作成してくれます。
これを応用して…
1
2
3
4
5
6
7
8
9
10
11
12
|
% echo 1 | rs 11
1
|
こうすると、1行目が1で残りが空の、縦11行×横1列の行列が作成されます。
1行目を消しましょう。grepで。
1
2
3
4
5
6
7
8
9
10
11
|
% echo 1 | rs 11 | grep -v "1"
|
10行の空行が作成されました。
これを応用して、100行の空行は
1
|
% echo 1 | rs 101 | grep -v "1"
|
で作成できます。
さて、ここまでの内容を踏まえ、いくつかのパターンで速度の計測です。
1
2
3
4
5
|
$ time echo 1 | rs 1000001 | grep -v "1" > /dev/null
real 0m0.072s
user 0m0.024s
sys 0m0.058s
|
1
2
3
4
5
|
$ time echo 1 | rs 1000001 | awk 'NR>1' > /dev/null
real 0m0.275s
user 0m0.202s
sys 0m0.089s
|
1
2
3
4
5
|
$ time echo 1 | rs 1000000 | tr -d '1' > /dev/null
real 0m0.082s
user 0m0.022s
sys 0m0.071s
|
行をカットするだけならawkよりgrepの方が速いみたいです。ともあれ、rsとても速いですね!!以上!
参考リンク