くんすとの備忘録

プログラミングや環境設定の覚え書き。

(初心者向け)空行を出力する(別解) の別解を考えてみました

@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とても速いですね!!

以上!

広告