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