背景
Ruby入門中だしでせっかくなのでRubyで便利だなぁと思ったワンライナーのTOP5を書いてみます。オプションとかは以下の記事がとてもわかりやすかったです。
5位 webサーバ
定番のやつですね。nginxの検証とかするときにproxy先が何でも良い場合がそこそこあってワンライナーで済ませちゃう時とかに使えます。今まではpython使ってましたがせっかくなのでRubyでやってくようにしてみようかなと思います。
$ ruby -run -e httpd . --port 8080
他言語の情報などなどがこの記事で見れるのでとても面白かったです。言語ごとのwebサーバをabとかでベンチマーク取ってみるの面白そうとも思いましたwいつかやってみようかな。
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