シェルスクリプトでSQLのJOIN結合やGROUP BYを実現する
シェルスクリプトでSQLのJOINを実現する方法について、王道のjoinコマンドと、awkを使った方法をそれぞれ考えてみる。 またSQLのGROUP BYもawkで実現してみる。 目次 前提 joinコマンドでJOIN awkでJOIN JOINと計算式 awkでGROUP BY 前提 今回使用するデータとして、以下の商品マスタと注文トランザクションを用意する。# products(pid,...
View Article/etc/hostsとhttpd.conf、ssl.confからドメインとIPの対応を一覧化する
全サーバの/etc/hostsとhttpd.conf、ssl.confからドメインとIPの対応を一覧化するスクリプトを、egrep, xargs, sedのような一般的なコマンドを使って作成してみる。 /etc/hostsは以下のようになっているとする。xxx.xxx.xxx.xx1 host1 xxx.xxx.xxx.xx2 host2 xxx.xxx.xxx.xx3 host3...
View Articlesedの代わりにRubyで複数行への正規表現マッチング
行単位に処理するのであれば、sedで簡潔に正規表現を使用してマッチングができる。しかし、複数行にわたって正規表現のマッチングをするのであれば、Rubyを使った方がいい。複数行であっても、正規表現内に行数指定がないのであれば、Rubyでなくてもいいのだが。 まずは複数行であっても正規表現内に行数の指定がなく、Rubyである必要がないものをsedを使って書いて、それをRubyに書き直してみる。...
View ArticleMuninでHTTPSのnginx_status取得が失敗する時の対処方法
MuninでHTTPSのnginx_status取得が失敗して、グラフが描画されない時の対処方法を書く。 Munin version 2.0.25 nginx.confが80ポートのHTTPの時は問題なくグラグが描画された。server { listen 80; listen localhost:80; 略 location /nginx_status { stub_status on;...
View ArticleUSキーボードをWindowsで正しく使用できるようになる常駐型アプリ
WindowsでUSキーボードを使用しようとすると、レジストリをいじったり、ドライバを切り替えないといけない。レジストリをいじるのがためらわれる場合、ULE4JISというアプリを使うと、アプリを起動するだけでUSキーボードが正しく使えるようになる。スタートアップに追加してPC起動時に自動で立ち上がるようにしておくと、USキーボードを不自由なく使える。...
View Articleコマンドで複数のリモートデスクトップを立ち上げてログインする方法
コマンドでWindowsのリモートデスクトップを連続で複数立ち上げてログインする方法をバッチでRDP起動を参考にして作成した。 for loopでIPアドレスあるいはドメイン名を列挙して、順番にリモートデスクトップを実行していく。for %i in ( 192.168.0.1 192.168.0.2 192.168.0.3 aaa.bbb.com ) do ( set...
View Articleeach_sliceで配列等を一定数で分割して表示する
配列等を一定数で分割したい時、shellで書くよりもRubyのeach_sliceで書く方がワンライナーでスッキリ書ける。 例えば1から98までを5個区切りで表示したいとする。 まず、Rangeオブジェクトで1から98までを作成し、each_sliceを繋げて、5個ずつに分割する。$ ruby -e '(1..98).each_slice(5){|arr| puts arr.join(" ")}'...
View ArticleRubyで歯抜けの連番からなる配列を作る
歯抜けの連番からなる配列をRubyのワンライナーで作ってみる。 歯抜けの連番(例えば1..5,16..20,31..35)配列を作る方法としてまず考えられるのは、Rangeを使って歯抜けではない部分を生成し、各Rangeを要素に持つ配列を作り、この配列を数値の配列に均す方法。...
View Articledfとduの結果が異なるときに疑ったこと
df -hを実行してディスク容量がいっぱいになったことを確認し、duを使ってディスク容量を無駄に使っているファイルを探そうとしたが、大きなディスク容量を使用しているファイルがなかった。ルートディレクトリの容量をdu -shx /で確認した結果とdf -hの結果が大きく異なっていた。 ※du -shxの-x,...
View ArticleExcelで改行やアスタリスク、クエスチョンマークなどの特殊文字を検索・置換する方法
Excelのデータをエディタに貼り付けるときなど、改行をスペース等に変換してから実行したいことがよくある。 Excelで改行に検索でヒットさせるには\r\nではダメで、Ctrl + jを打たなくてはいけない。 検索と置換ダイアログの文字列入力欄でCtrl +...
View ArticleSSHを通してリモート先でコマンド実行する方法とその際にクォーテーションのエスケープを気にしないようにする方法
SSHを通してリモート先でコマンド実行するには、ssh $remote '$command $option'というようにsshの最後にコマンドを書く。コマンド部分をくくるクォーテーションと、コマンド内部でクォーテーションを使用した時のエスケープについて書く。 目次 クォーテーションが必要ない場合 クォーテーションが必要な場合 シングルクォーテーションかダブルクォーテーションか...
View Article『RDB技術者のためのNoSQLガイド』読書ノート
『RDB技術者のためのNoSQLガイド』を読んだので、学んだ点をまとめる。 RDB技術者のためのNoSQLガイド 第2章 イントロダクション NoSQLにすると嬉しいこと・辛いこと 外部サービスのデータ格納などにおいて、NoSQLにすると、スキーマが変わってもとりあえず溜めておける。スキーマが変わってデータを取得できないというリスクを回避できる。 よくあるNoSQLの勘違い...
View ArticleRubyやsedで複数行の文章を任意の箇所に挿入する
お題 複数行の文章を任意の箇所に挿入するワンライナーを書く ファイル中の任意の箇所、例えば複数行にわたる正規表現にマッチした箇所の下に、複数行の文章を挿入するとき、Rubyのワンライナーでどのように書くかを考えてみる。またsedでの対処法も考えてみる。 今回編集するファイル名はtest.shとする。test.shにはあるif文が書かれた箇所があり、そのif文の下にもう一つif文を入れたいとする。...
View ArticleSSHでコマンド実行した時にコマンド終了後も制御が戻らない時の対処方法
SSHでコマンド実行した時にリモート先でコマンド終了後も制御が戻らないことがあった。現象を確認した後に対処方法を二つあげてみる。 SSHの制御が戻らない現象 今回SSHの制御が戻らなかった時のコマンドはservice jetty start。jettyを起動したかった。 SSHでリモートにログインした後で直接実行すると、問題なくコマンドは終了する。 # remote=10.100.68.239 #...
View Articleexpectの中でawkを使う方法
以下のコマンドはサーバ($host)をLBから外して、jettyを再起動したあと、再度LBに組み込むものである。変数$hostをfor loopに組み込んで全サーバのjetty再起動を以下のコマンドで自動実行したかった。 # サーバパスワードを入力 read -sp 'password:' pw # LBからサーバを1台外すコマンド # コマンドは略 #...
View Article終了ステータスを$?とif文で比較してはいけない
プロセスの終了ステータスを$?で取得し、if文で判断するshellスクリプトは書いてはいけない。if文を使うということは、条件文としてtestコマンドを使うことになり、ifとelif(の中のtestコマンド)が実行されるたびに、終了ステータス$?が変わってしまう。 以下にサンプルコードを書く。 $ cat test.sh #!/bin/sh return_val() { echo '"$?" is...
View ArticleCIDR表記で示されたIPアドレスの範囲に含まれるか確認するコマンド
CIDR表記で示されたIPアドレスの範囲に含まれるかどうかを簡単に確認したい場合、シェルコマンドだけでやろうとすると難しかったので、Rubyのワンライナーを使った。 $ target_ip=`dig +short example.co.jp` $ ruby -r 'ipaddr' -e 'p IPAddr.new("xxx.xxx.xxx.0/24").include?("ARGV[0]")'...
View Articlefpingで最速で全サーバの疎通を確認する方法
fpingは並列で複数ホストにPingチェックを行ってくれるため、チェックしたいサーバ全台をループで回してpingを送るよりも高速に実行できる。 ただfpingのオプションを適切にすることでさらに高速に実行できるし、fpingと組み合わせるコマンドの工夫でさらに高速に実行できる。 オプション無し まずはオプションを指定せずに一番遅い方法を見てみる。 $ time cat all_list |...
View ArticleRubyでシェル変数を使う
Rubyでシェル変数を使う方法には、Rubyプログラムの引数として渡すか、シェル変数を環境変数にするかの2通りがある。 引数として渡す場合、RubyではARGVを使って値を取得する。 $ param1="p1" $ param2="p2" $ ruby -e 'puts ARGV[0], ARGV[1]' $param1 $param2 p1 p2...
View Article環境変数を確認する方法まとめ
プロセスの環境変数を確認する方法が複数あるのでまとめる。 strings 確認したいプロセスのプロセスIDがわかっているときは、バイナリファイルやデータファイルでも表示可能な文字列を表示できるstringsを使うのが一番簡潔。...
View Article