地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

【Ruby】ワンライナーで便利そうなものを書いていく

背景

Ruby門中だしでせっかくなのでRubyで便利だなぁと思ったワンライナーのTOP5を書いてみます。オプションとかは以下の記事がとてもわかりやすかったです。

maeharin.hatenablog.com

5位 webサーバ

定番のやつですね。nginxの検証とかするときにproxy先が何でも良い場合がそこそこあってワンライナーで済ませちゃう時とかに使えます。今まではpython使ってましたがせっかくなのでRubyでやってくようにしてみようかなと思います。

$ ruby -run -e httpd . --port 8080

他言語の情報などなどがこの記事で見れるのでとても面白かったです。言語ごとのwebサーバをabとかでベンチマーク取ってみるの面白そうとも思いましたwいつかやってみようかな。

qiita.com

4位 合計値を出す

BEGIN/ENDが使えるのでawkでできるようなことは大体できるのかなという印象を持ちました。$.awkでいうNRが取れます(perlと同じなのでわかりやすい)。この構文は汎用性がめちゃめちゃ高いので4位くらいに入れてみました。

ruby -ne 'BEGIN{$sum = 0}; $sum += $_.to_i; END{puts $sum}' number.txt

3位 四捨五入する

cat test.txt
test 1.2
aaa 2.23333
ccc 4.433
ddd 2.11

こんなファイルがあって第二フィールドをそれぞれ四捨五入したい場合にroundが使えて便利だった。awk使うとawk '{printf(“%d\n",$1 + .0.5)}’みたいに四捨五入したい桁が直感的にわからないけどroundなら直感的にわかって良い。

$ ruby -ne 'puts $_.split[1].to_f.round(1)' test.txt
1.2
2.2
4.4
2.1

2位 数字を括弧で括る

perlとかでやるようなchompが使えて便利でした。何かしらの文章を書くときにわかりやすいように表題とか書くときに使えたりします。

seq 10 | ruby -ne 'chomp;puts "{{ "+$_+" }}"'
{{ 1 }}
{{ 2 }}
{{ 3 }}
{{ 4 }}
{{ 5 }}
{{ 6 }}
{{ 7 }}
{{ 8 }}
{{ 9 }}
{{ 10 }}

1位 数字を渡すとエラーナンバーを表示してくれるワンライナー

エラー時にエラーナンバーしか出力されないみたいなケースで2とか111と頻出のものならさっと出てくるかもしれないですが12とか18とか数字からは何のエラーだろ?ってなります(少なくとも私は)。

#include <stdio.h>
#include <errno.h>

int main(int argc, char **argv)
{

  FILE *fp = fopen( "no_exist_filepath", "r" );
  if(fp == NULL)
    printf("%d\n", errno); // こんな感じの出力しかしないやつ

  return 0;
}

/usr/include/asm-generic/errno-base.hとかをさっとみにいけば良いですがパスを覚えている可能性も低いです。そうなったときに使えるのがこのワンライナー。数字を渡すことで人間がわかりやすいよう表示してくれます。便利!

$ echo 1 2 111 | ruby -ne '$_.split.map {|d| printf "%d: %s\n", d, SystemCallError.new(d.to_i)}'
1: Operation not permitted
2: No such file or directory
111: Connection refused